【发布时间】:2014-10-14 05:02:41
【问题描述】:
我想在一个页面上实现多个聊天窗口(例如 facebook)。 目前使用“房间”,简化代码:
[客户]
socket.emit('join', 'room1');
socket.emit('join', 'room2');
[服务器]
socket.on('join', function(room)
{
socket.join(room);
});
所以客户端上的每个单独的房间,它是一个处理聊天逻辑的单独类,它必须从服务器接收事件仅用于连接的房间。但是如果是一页,则使用一个socket连接,所以如果一个socket连接多个房间,那么订阅一个房间,也会收到另一个房间的事件。我应该如何区分这个?
我正在考虑这些方法:
- 为每个房间强制新的套接字连接(所以 10 个聊天 = 10 个套接字),我认为这不是一个好主意,因为负载很高(如果我说的不对,请纠正我)
- 客户端事件的前缀,例如,如果我想处理特定房间的事件,我会这样订阅:
[客户]
var room = 'room1';
socket.on(room + '.new_message', function()
{
// append message to chat
});
[服务器]
io.sockets.in('room1').emit('room1.new_message', 'some message');
这是个好主意吗?
如果有其他方法,请与我分享。
【问题讨论】:
-
您的问题解决了吗?我正在尝试做同样的事情
-
签出
namespacingsocket.io/docs/#restricting-yourself-to-a-namespace
标签: node.js sockets socket.io chat chatroom