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

时间:2014-08-20 18:01:26

标签: node.js sockets socket.io chat chatroom

我想在一个页面上实现多个聊天窗口(例如facebook)。 目前正在使用" rooms",简化代码:

[客户]

socket.emit('join', 'room1');
socket.emit('join', 'room2');

[服务器]

socket.on('join', function(room)
{
    socket.join(room);
});

所以客户端上的每个单独的房间,它是一个单独的类来处理聊天逻辑,它必须从服务器接收事件,仅用于连接的房间。但如果它是一个页面,则使用一个套接字连接,因此如果一个套接字将连接到多个房间,然后订阅一个房间,也将从另一个房间接收事件。我该如何分开?

我正在考虑这些方法:

  1. 强制每个房间的新插座连接(所以10个聊天= 10个插座),我认为这不是一个好主意,因为高负荷(如果我不对,请纠正我)
  2. 客户端事件的前缀,例如,如果我想处理特定房间的事件,我会订阅如下:
  3. [客户]

    var room = 'room1';
    socket.on(room + '.new_message', function()
    {
        // append message to chat
    });
    

    [服务器]

    io.sockets.in('room1').emit('room1.new_message', 'some message');
    

    这是一个好主意吗?

    如果是其他方式,请与我分享。

2 个答案:

答案 0 :(得分:0)

一个插座一个房间,没有关于多个插座的问题。

答案 1 :(得分:-1)

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