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

Posted

技术标签:

【中文标题】socket.io 可以处理的最大房间数是多少?【英文标题】:What's the maximum number of rooms socket.io can handle? 【发布时间】:2016-07-30 04:27:57 【问题描述】:

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

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

我的问题:为每个主题 + 消息类型组合创建一个房间是否可行,即 5 x 100 个房间? socket.io 会像这样表现良好,还是有更好的方法来解决这个问题?向每个单独的套接字发送单独的消息而不是使用房间会更好吗?

感谢您的帮助。

【问题讨论】:

@Baronz - 这个问题与那个问题完全不同。这个问题是关于你可以在服务器上维护多少个房间,而不是你连接了多少个套接字。 【参考方案1】:

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

一个房间只需要一点点内存来保存每个房间中的套接字阵列。除此之外,没有额外的费用。

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

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

是的,这很容易实现。

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

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

会向每个单独的套接字发送单独的消息,而不是 使用房间,更好吗?

不会有明显差异。房间只是一个便利工具。发射到一个房间,只需要遍历房间中的每个套接字并发送到它 - 就像你建议自己做的一样。不妨使用内置房间功能,而不是自己重新实现。

【讨论】:

好一个。现在事件的最大数量(或事件名称或 io.("name") 无论名称是什么)怎么样?我正在考虑一个复杂的网状聊天系统,其中有很多房间和很多不同的事件。我做了一个有问题的原型。它会在一段时间后停止响应,连接的客户端很少且动态事件数量有限。非常感谢您的帮助。 @HarvantS.Choudhary - 你应该问自己的问题,更完整地描述你想问的问题。

以上是关于socket.io 可以处理的最大房间数是多少?的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 中最大同时打开的房间

如何使用集群处理 Socket.IO 房间?

Socket.io 广播到房间不工作

socket.io-redis 如何处理房间?

NodeJs Socket.io 房间

无法向socket.io中的房间发送消息