我有一个问题,我似乎无法解决它。我正在与远程系统进行某种集成,而我的代码在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);
});
但是,当我尝试从服务器向客户端发送消息时,我向所有人广播消息。我做错了什么?
答案 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
对象的内容