socket.io 在一页上进行多个聊天

Posted

技术标签:

【中文标题】socket.io 在一页上进行多个聊天【英文标题】:socket.io multiple chats on one page 【发布时间】: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 【参考方案1】:

一个房间一个插座,多插座没问题。

【讨论】:

【参考方案2】:

我认为您只创建一个套接字来连接到服务器。但是一个插座可以加入多个房间。 当服务器发送到客户端时,您必须确定房间发送。 例如:socket.broadcast.to(room).emit(.....data: idRoom);。 当客户端从服务器接收套接字时。它必须确定 popUp 将接收消息。您可以使用服务器中的 idRoom 来确定 PopUp 接收。 对不起我的英语

【讨论】:

以上是关于socket.io 在一页上进行多个聊天的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io 通过 id 断开客户端

使用 socket.io 管理多个聊天室的正确方法是啥?

允许多个用户加入聊天室(使用 Django、Socket.io 和 node.js)

Socket.IO 订阅多个频道

递归删除多个 socket.io 监听器

如何使用 socket.io、react native、nodejs 管理聊天应用程序的多个套接字连接