在多核服务器中使用带有集群的 socket.io 的好方法?

Posted

技术标签:

【中文标题】在多核服务器中使用带有集群的 socket.io 的好方法?【英文标题】:Good way to use socket.io with cluster in multi-core server? 【发布时间】:2012-07-02 06:27:37 【问题描述】:

我创建了一个 nodejs 应用程序,它可以在单核中正常工作。此应用程序使用 socket.io 进行轻快的通信。

现在,我想通过使用 nodejs 中的 cluster 模块使其能够在多核系统上运行来垂直扩展我的应用程序。

我的应用程序中的所有内容都将数据存储在 Redis 中,因此,处理一些基本数据和会话没有问题。

但是,当我使用集群生成多个工作进程时,似乎每个工作进程都有自己的套接字处理。

例如,假设有一个名为“guest”的聊天室。

用户 A 和用户 B 连接到房间,他们被分配到不同的工作进程。

由于它们在不同的进程中,并且这些进程不共享套接字侦听器,因此用户 A 和用户 B 无法相互交谈。

解决这个问题的好方法是什么? socket.io 是否支持多核系统?

socket.io 是否只供单核使用?

【问题讨论】:

您可以使用RedisStore 运行socket.io 以扩展进程/服务器。更多深度请参见this previous answer of mine。 【参考方案1】:

您可以正常使用 socket.io,但在后台使用 redis 存储。它还将支持 socket.io 上的多个实例,而无需任何外部库。它甚至支持多个实例的房间。

如何使用 redis 设置 socket.io 的链接:Using Multiples Nodes/Processes with socket.io

【讨论】:

我认为该链接并没有真正指向您认为的位置。 引用链接已更改:请查看socket.io/docs/v4/using-multiple-nodes

以上是关于在多核服务器中使用带有集群的 socket.io 的好方法?的主要内容,如果未能解决你的问题,请参考以下文章

带有 socket.io 和 expressjs 的节点集群

带有Node.js的HTML5画布,集群和Socket.IO

我在集群 node.js/socket.io/redis pub/sub 应用程序中收到重复消息

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

Node.js Socket.IO 聊天应用集群服务器

socket.io 中的连接限制