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);
好吧,我通过遍历客户端列表并查看哪一个有我想要的套接字来解决这个问题
- Nodejs + Passport.js + Redis:如何在Redis中存储会话
- 使用Redis Cloud和Heroku正确configuration节点会话存储
- 使用NodeJS设置会话variables
- nodejs,如何检查每个页面上是否定义了会话
- 节点js – 用户身份validation,在会话中存储什么?
- 使用socket.io和express-session时,会在每次页面加载时生成一个新的会话ID
- 在快速应用程序之间共享会话(connect-mongodb)
- Passport.js twitter身份validation导致500错误,req.session未定义
- 我如何强制删除会话ID cookie与快速会议?