Javascript 无法通过node.js和socket.io仅向一个特定房间发送消息

Javascript 无法通过node.js和socket.io仅向一个特定房间发送消息,javascript,node.js,sockets,socket.io,client-server,Javascript,Node.js,Sockets,Socket.io,Client Server,我有一个问题,我似乎无法解决它。我正在与远程系统进行某种集成,我的代码在iframe中,但这对我希望的这一点不重要: 我正在尝试从服务器向特定房间/客户端发送消息以开始会话。我要做的第一件事是当用户登录时,我用用户名从客户端发出消息 CLIENT.JS conn.on('connect', function () { conn.emit('session', { username: 'some_username' }); }, false); 在服务器端,我收到消息并将套接字连接到房间

我有一个问题,我似乎无法解决它。我正在与远程系统进行某种集成,我的代码在iframe中,但这对我希望的这一点不重要:

我正在尝试从服务器向特定房间/客户端发送消息以开始会话。我要做的第一件事是当用户登录时,我用用户名从客户端发出消息

CLIENT.JS
conn.on('connect', function () {
   conn.emit('session', { username: 'some_username' });
}, false);
在服务器端,我收到消息并将套接字连接到房间

SERVER.JS
socket.on('session', function(session) {
   socket.join(session.username);
});
我有另一个模块通过redis与这个server.js脚本通信。因此,我在server.js中还有两个事件

SERVER.JS
var userCreate = redis.createClient();
userCreate.subscribe("userCreate", "userCreate");

var userDestroy = redis.createClient();
userDestroy.subscribe("userDestroy", "userDestroy");

userCreate.on("message", function(channel, data) {
   socket.to(JSON.parse(data).username).emit('beginSession', data);
});

userDestroy.on("message", function(channel, data) {
   socket.to(JSON.parse(data).username).emit('endSession', data);
   socket.leave(JSON.parse(data).username);
});

但每当我试图将消息从服务器发送到客户端时,我都会将消息广播给每个人。我做错了什么?

好吧,从语法的角度看,你做的每件事都是正确的

您没有忘记在endSession中指定userId属性吗


如果这不起作用-您应该提供数据对象的内容,并且用户id是用户名吗?我只是从beginSession事件中假设的。但你可能是对的。这取决于客户端发送的数据,这只是脚本中的一个输入错误,一切正常。从客户端发送的Id是用户名。没有错误。
userDestroy.on("message", function(channel, data) {
   socket.to(JSON.parse(data).userId).emit('endSession', data);
   socket.leave(JSON.parse(data).userId);
});