【问题标题】:Will socket.io broadcast without listener consume resources?没有监听器的socket.io广播会消耗资源吗?
【发布时间】:2016-06-04 03:16:15
【问题描述】:
假设我有一个 socket.io 事件io.emit('foo','large foo content'),并且有很多客户端,其中一些正在监听 foo socket.on('foo',function(content){ console.log(content);}
所以我的问题是向非听众发送是否会发送实际消息。
广播大型消息时有很多非听众会影响性能吗?
我知道房间,但我想成为处理听什么或不听什么的客户。
【问题讨论】:
标签:
node.js
sockets
websocket
socket.io
【解决方案1】:
无论另一端是否有监听器,发送到套接字都会发送消息(发送方不知道是否有监听器)。这会消耗带宽、电池和少量 CPU,但除非您发送大量消息或大量消息,否则这通常不是问题。
当接收到消息时,接收 socket.io 代码将消息解包,然后将其广播到任何本地侦听器。如果没有本地听众,那么当时它就什么也做不了。然后消息就被垃圾回收了。
如果您要发送大量消息或大量消息,最好只将它们发送给关心它们并正在监听它们的客户。这很容易通过使用房间创建自己的订阅/发布系统来实现(您可能已经知道了)。对给定消息类别感兴趣的客户可以请求分配到相关房间(基本上订阅这些消息)。然后,当服务器想要发送该类消息时,它可以将其广播给相应房间的成员,并且只会发送给那些表示对该类消息感兴趣的客户端。