socket.io如何区分消息是发给哪个房间的

socket.io How to distinguish for which room is the message

我从服务器发消息给两个房间

io.to('room_one').emit('message', 'room_one');
io.to('room_two').emit('message', 'room_two');

当我使用此客户端代码时,我收到了两条消息。

socket.on('message', function (data) {      
    console.log(data);
});

但是我想区分消息是针对哪个房间的。 我想这样的事情是可以做到的。

socket.on('room_one#message', function (data) {     
    console.log(data);
});

socket.on('room_two#message', function (data) {     
    console.log(data);
});

当消息到达客户端时,没有内部指示消息被发送到哪个房间。这是因为消息并没有真正发送到房间,而是发送到房间中的连接。

因此,当您收到消息时,您可以通过三种方式修改您的代码:

  1. 您可以使用不同的邮件名称。您将不得不 .emit() 服务器上的不同消息名称,并且您必须在客户端中监听每个不同的消息名称。

  2. 您可以在消息中添加一段数据(作为消息数据发送的对象上的 属性)以指示它与哪个房间相关联。

  3. 您可以为每个房间使用不同的连接,因此给定的连接仅在一个房间中,因此您会知道发送到它的任何消息都与该房间相关联。


根据消息的相似或不同程度,我可能会 select 选项 1 或选项 2。如果消息确实相同,只是与不同的房间相关联,我会选择选项 2 . 如果消息在不同的房间里实际上有不同的含义,那么我会选择选项 1。