当前位置: 首页 > 知识库问答 >
问题:

Socket.io最多能处理多少个房间?

佴保臣
2023-03-14

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

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

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

谢谢你的帮助。

共有1个答案

相高谊
2023-03-14

io房间是一种轻量级数据结构。它们只是与该房间相关联的连接数组。您可以想要多少就有多少(在正常的内存使用限制内)。没有一件重量级的事情让一个房间在资源方面变得昂贵。它只是希望与那个房间关联的插座列表。发射到一个房间只不过是迭代通过房间中的套接字数组并发送到每个套接字。

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

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

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

是的,这很容易可行。

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

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

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

不会有明显的区别。房间只是一个方便的工具。发射到一个房间,只需迭代房间中的每个套接字并发送到它--就像你自己提议的那样。不妨使用内置的房间功能,而不是重新实现自己。

 类似资料:
  • 我正在使用Node.js、mongodb、Socket.io和Express实现一个聊天服务器。我想知道的是是否有一个最大的限制。同时开放房间的socket.io多房间聊天。 另外,是否有一个最大的不。每个房间的用户。

  • 我使用这个聊天室示例作为参考,设置了一个多房间的socket.io/nodeJS聊天服务器: https://raw.githubusercontent.com/socketio/socket.io/master/examples/chat/index.js 我使用这个doc将代码从单间修改为多间: https://socket.io/docs/roams-and-namespaces/ 我还修改

  • 这是我的Compose.yml 我遇到一些问题,当发送消息到服务器时,server1显示连接,并显示GET消息,但下次发送时,server2显示GET消息 如何使其成为“我连接的服务器就是我发送消息到的服务器”?

  • 我遇到了下面的问题 一排有N栋房子。每栋房子都可以漆成红色、绿色或蓝色。每种颜色给每间房子上色的成本是不同的。找到每栋房子的颜色,这样相邻的两栋房子就不会有相同的颜色,所有房子的着色总成本最低。 这是完整的问题 在我看来,这个问题有点令人困惑,因为目标是将成本降到最低,并确保相邻的房子没有相同的颜色。在这种情况下,我不应该从三种颜色中选择成本最低的两种颜色吗。 这里是颜色的成本 红色100美元 我

  • 问题内容: 在运行Linux 2.6.35+的系统中,我的程序创建了许多子进程并对其进行监视。如果子进程死了,我会进行一些清理并再次产生该进程。我经常在过程中获取信号。与异步使用。 当将信号处理程序用于非实时信号时,当信号处理程序针对特定信号运行时,必须阻止同一信号的进一步出现,以避免进入递归处理程序。如果此时有多个信号到达,则内核仅调用一次处理程序(当信号被解除阻塞时)。 使用时是否具有相同的行

  • 问题内容: 我想知道您是否有关于websocket的并发连接的任何数据?我在Node.js服务器上使用Socket.io。有多少个客户端可以连接到套接字并接收数据而无需关闭我的服务器?1000?1000.0000? 谢谢! 问题答案: 这在很大程度上取决于您的硬件配置,您在服务器端究竟在做什么/处理什么以及您的系统是否针对许多并发连接进行了优化。例如,默认情况下,在Linux计算机上,您可能首先会