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

时间:2015-07-26 16:18:08

标签: javascript node.js sockets socket.io

我从服务器向两个房间发送消息。

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 个答案:

答案 0 :(得分:1)

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

因此,当您收到消息时,只有三种方法可以修改您的代码:

  1. 您可以使用其他消息名称。您必须在服务器上cor使用不同的消息名称,并且必须在客户端中侦听每个不同的消息名称。

  2. 您可以向消息添加一段数据(作为带有消息的数据发送的对象上的属性)以指示与其关联的空间。

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

  4. 根据消息的相似程度或不同,我可能会选择选项1或选项2.如果消息真的相同,只是与不同的房间相关联,我会选择选项2.如果消息实际上有在不同的房间有不同的含义,然后我选择选项1.