如何扩展socket.io?

时间:2011-05-10 03:05:50

标签: ajax node.js comet socket.io

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

如何将两个服务器与socket.io同步?

2 个答案:

答案 0 :(得分:42)

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

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

所以我只建议使用Cluster,如果你只使用Web Socket& Flash Socket连接,不需要使用广播功能。

那你该怎么办?

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

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

答案 1 :(得分:3)

您可以尝试使用例如cluster模块并将负载分配给多个核心(如果您有多核CPU)。如果这还不够,您可以尝试使用reverse proxy在多个服务器之间分发请求,并redis作为中央会话数据存储(如果您的方案可能)。