24

假设服务器获得 10,000 个并发连接(通过 socket.io)。这很多,如果它不能再处理,我需要启动另一台服务器。

如何将两台服务器与他们的 socket.io 同步?

4

2 回答 2

42

我不会使用 Cluster 来扩展 Socket.IO。Socket.IO 0.6 设计为单进程服务器,它使用长寿命连接或轮询连接来实现服务器和客户端之间的实时连接。

如果你把 Cluster 放在你的 socket.io 客户端前面,你基本上会在不知道客户端的不同服务器之间分配轮询传输。这将导致连接断开。但是,向所有客户端广播也会很痛苦,因为它们都分布在不同的服务器上,而且它们之间没有 IPC。

因此,如果您只使用 Web Socket 和 Flash Socket 连接并且不需要使用广播功能,我只会建议使用 Cluster。

那你该怎么办?

您可以等到 socket.io 0.7 发布,它从头开始设计用于多个进程。

或者您可以使用 pub/sub 在不同服务器之间发送消息。

于 2011-06-10T07:17:33.277 回答
3

您可以尝试使用例如集群模块并将负载分配到多个内核(如果您有一个多核 CPU)。如果这还不够,您可以尝试使用反向代理在多个服务器之间分发请求,并将redis作为中央会话数据存储(如果您的场景可能的话)。

于 2011-05-10T07:31:45.940 回答