socket.io可以处理的最大房间数是多少?

sim*_*bro 14 javascript performance node.js socket.io

我正在使用socket.io构建一个应用程序

我正在使用socket.io的房间功能,用户可以订阅5个"主题".在该主题中广播的每个消息具有消息类型,其中有100个.用户将仅接收允许他们接收的类型的消息,其可以在30到70之间.

我的问题:是否可以为每个主题+消息类型组合创建一个房间,这将是5 x 100个房间?socket.io会像这样表现得好,还是有更好的方法来解决这个问题?将单个消息发送到每个插槽而不是使用房间会更好吗?

谢谢你的帮助.

jfr*_*d00 32

socket.io rooms是一个轻量级的数据结构.它们只是与该房间相关联的一系列连接.您可以拥有任意数量(在正常的内存使用限制内).没有重量级的东西会使房间的资源变得昂贵.它只是一个希望与该房间相关联的套接字列表.发送到一个房间只不过是通过房间里的插座阵列进行迭代并发送到每个房间.

一个房间只需要一点点内存来保存每个房间的插座阵列.除此之外,没有额外费用.

此外,如果您的替代方案是仅为每个主题维护一组套接字,那么您的替代方案可能不会为您节省太多或任何东西.

我的问题:是否可以为每个主题+消息类型组合创建一个房间,这将是5 x 100个房间?

是的,这很容易实现.

socket.io会像这样表现得好,还是有更好的方法来解决这个问题?

拥有这么多房间没有问题.它是否表现良好完全取决于你在那么多房间里做的事情.如果您经常向许多房间发送大量消息,每个房间都有很多套接字,那么如果性能有问题,您将不得不进行基准测试.

将单个消息发送到每个插槽而不是使用房间会更好吗?

不会有明显的差异.房间只是一个便利工具.发送到一个房间,只需要遍历房间里的每个插座并发送到它 - 就像你建议自己做的一样.也可以使用内置的房间功能,而不是重新实现自己.