答案 0 :(得分:2)
io.emit(msg, data)
发送到连接到该服务器的所有客户端。客户端是否正在监听msg
并不重要。数据将发送到客户端,如果客户端具有该msg
的侦听器,则将调用该msg
的事件侦听器。
如果客户端没有该消息的侦听器,则消息将到达,但没有侦听器。那时,它就像任何没有听众的事件一样。事件被触发,但如果没有侦听器,则回调队列为空,因此没有事件处理程序可以调用。
我不太了解两个图表之间的预期差异,但第一个图表正确显示了发送给所有三个客户端的data
。第二个图表没有显示,所以它不正确。
请记住,不仅仅是发送的数据。 msg名称也随数据一起发送。这就是接收客户端如何知道触发它的事件处理程序。
你可以想到这样的客户。
在服务器端,您可以选择如何发送确定邮件来源的邮件:
io.emit()
发送给所有已连接的客户端。
socket.emit()
仅发送到该特定客户端套接字。
socket.broadcast.emit()
发送给除socket
所代表的客户以外的所有已连接客户端。
socket.to(room).emit()
发送给该会议室的客户。
io.of('chat').emit()
发送给该命名空间上连接的客户端。
答案 1 :(得分:1)
第一种方式更准确。 socket.io的工作原理是所有客户都在倾听相关事件,如果有人碰巧通过,那么他们将采用那个数据形式。
这是socket.io的简化示例:
客户A:
socket.on('attendance', data)
客户B:
socket.on('leaving', data)
客户C:
socket.on('attendance', data)
服务器:
io.emit('attendance', data)
客户A:
if 'attendance' == 'attendance' //true; do something with data
客户B:
if 'attendance' == 'leaving' //false; do nothing
客户C:
if 'attendance' == 'attendance' //true; do something with data
希望这有帮助!