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

标签 javascript node.js performance socket.io

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

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

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

感谢您的帮助。

最佳答案

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

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

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

My question: is it feasible to create a room for every topic + message type combination, which will be 5 x 100 rooms?

是的,这很容易实现。

Will socket.io perform well like this, or is there a better way to approach this problem?

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

Would emitting individual messages to each individual socket, instead of using rooms, be better?

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

关于javascript - socket.io 可以处理的最大房间数是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507543/

相关文章:

javascript - 替换字符串值和边界空格(如果存在)

javascript - 如何使用 jquery 影响特定元素

java - 为什么 Math.pow(int,int) 比我天真的实现慢?

java - HTTP Node.js Java API

node.js - REST API 服务器困境

java - JDBC Oracle 查询。使用 setInt() 而不是 setObject() 执行时速度慢

MySQL:预计算数据以获得更好的性能

javascript - jQuery - 在按钮之前选择 li

javascript - 更改页面或刷新时失去全屏

node.js - 如何为 Mocha 定义测试目录?