直截了当: 我正在使用node.js,socket.io和redis作为私人聊天系统。
在连接用户将其网站ID(userID)传递给node.js服务器。他可能有多个连接,所以我必须以某种方式将socketID(每个连接)和userID配对。我一直在考虑使用redis来存储userID-> sessionID对。但是,当用户断开连接时,我需要从redis中删除该对..但我只有socketID而不是userID所以我无法通过该键选择..
现在,我是以错误的方式接近这个还是应该存储userID-> socketID和socketID-> userID对?也许有人可以提供更优雅的解决方案?
答案 0 :(得分:3)
更优雅的解决方案是使每个套接字连接到通道userID,例如:
io.sockets.on('connection', function (socket) {
socket.join(userID);
});
// when you want somebody to send a message to userID you can do:
io.sockets.in(userID).emit(message);
您需要注意两件事:
当其他用户想要向userID发送消息时,他们不需要连接到userID频道,他们可以向chat
频道发送消息并将userID作为属性传递。例如:
var chat = io
.of('/chat')
.on('connection', function (socket) {
// connected to public chat
})
.on('message', function (data) {
if (data.userID && data.message) {
io.sockets.in(userID).emit('UserX: ' + data.message);
}
});