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

时间:2016-04-08 19:14:22

标签: javascript node.js performance socket.io

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

我使用socket.io的房间功能,有5个"主题"用户可以订阅。在该主题中广播的每条消息都有一个消息类型,其中有100条消息类型。用户只会收到允许接收类型的消息,这些消息可能介于30到70之间。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:27)

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

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

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

  

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

是的,这很容易实现。

  

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

拥有这么多房间没有问题。它是否表现良好完全取决于你在那么多房间里做的事情。如果你定期向很多房间发送大量的消息,每个房间里都有很多套接字,那么如果性能有问题,你就必须进行基准测试。

  

将向每个单独的套接字发出单独的消息   使用房间,更好吗?

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