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

时间:2014-12-11 16:24:00

标签: javascript node.js sockets socket.io client-server

我有一个问题,我似乎无法解决它。我正在与远程系统进行某种集成,而我的代码在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);
});

但是,当我尝试从服务器向客户端发送消息时,我向所有人广播消息。我做错了什么?

1 个答案:

答案 0 :(得分:0)

嗯,从语法的角度来看,你正在做的一切都是正确的。

您是否忘记在userId中指定endSession属性?

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

如果这不起作用 - 您应该提供data对象的内容