【发布时间】:2013-11-26 13:57:10
【问题描述】:
我正在学习NodeJS和Socket.IO,一直在学习各种教程,主要是做一个基本的聊天室。
到目前为止,我的应用运行良好:能够与能够移动到不同“房间”的客户一起发送消息。
现在我正在尝试整理它,让它看起来很重要。
我对以下想法感到困惑:
当用户 A 从房间 A 移动到 B 时,会发送一个 emit() 方法来更新一个包含用户计数的数组,然后将其发送回发送者。然后更新侧面板中的房间列表,例如房间 A (0),房间 B (1)。
现在,将新数据发送给发送者很容易并且有效,房间列表得到更新,并且其他房间(发送者不在)具有超链接(这是用户在房间之间移动的方式)
但我想向其他客户发送数据,因此他们的房间列表也会更新。发送与之前相同的数据意味着其他客户端的房间列表不正确,因为数据引用的是发送者加入的新房间名称,而不是其他客户端当前所在的房间。
一些代码:
socket.on('switchRoom', function(data) {
var newroom = sanitize(data).escape().trim();
socket.leave(socket.room);
socket.join(newroom);
socket.room = newroom;
socket.emit('updaterooms', rooms, newroom);
// this is the problem area, socket.room should be the socket.room data for the non-sending client
//socket.broadcast.emit('updaterooms', rooms, socket.room);
});
我如何向所有其他客户端(不是发送者)发送包含在他们自己的套接字“会话”(即 socket.room)中的数据?
【问题讨论】:
-
所以您希望广播应该发送到所有套接字而不是自身套接字?我的理解正确吗?
-
是的!因此,当用户 A 切换房间并触发“switchRoom”时,我希望用户、B、C 和 D 接收“socket.broadcast.emit('updaterooms', rooms, socket.room)”,其中“socket.room”是他们自己的房间数据。
标签: javascript node.js websocket socket.io