Express – socket.io – 会话。 将用户标识作为套接字标识

我正在使用express-socket.io会话 。 我想我可以通过查看教程来设置基本configuration:

//BASIC CONFIG? var clients = []; var session = require("express-session")({ secret: 'some key', resave: true, saveUninitialized: true }); var sharedsession = require("express-socket.io-session"); app.use(session); io.use(function(socket, next){ next(); }); io.use(sharedsession(session, { autoSave:true })); io.on('connection', function(socket) { console.log("CLIENT CONNECTED"); var session = socket.handshake.session; clients.push(socket); socket.on('disconnect', function() { console.log("CLIENT DISCONNECTED"); }); }); 

我现在想要做的就是引用特定的客户端套接字,而不是由套接字引用,而是由应该分配给该套接字的会话标识引用。 当用户login时发生这种情况:

 req.session.user_id = user_id; //(user_id is equal to DB {0,1,2,3...} ids 

当我这样做时,我能够将套接字发送给特定的客户端:

 clients[0].emit("to_do",info); // I don't know who is client index 0 compared to the login reference... 

我希望能够做到这一点或类似:

 user_id = 3; // which would have a socket assigned clients(user_id).emit("to_do",info); 

这将意味着每个客户端将有一个套接字分配给其以前分配的ID。 我怎么能这样做,所以我可以通过该ID指定套接字? 我没有经历过所有这一切,所以很抱歉有什么大错误。 谢谢

你的问题可以通过每个套接字join一个以id命名的组来解决:

 socket.join(socket.id); io.sockets.in(socket.id).emit('to_do', info); //or io.sockets.in(clients[0].id).emit('to_do', info); 

好吧,我通过遍历客户端列表并查看哪一个有我想要的套接字来解决这个问题