如何扩展 socket.io?

发布于 2024-11-06 13:51:17 字数 102 浏览 5 评论 0原文

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

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

Let's say a server gets 10,000 concurrent connections (via socket.io). That's a lot, and if it can't handle any more, I need to spin up another server.

How can I sync the two servers together with their socket.io?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

盗心人 2024-11-13 13:51:17

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

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

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

那么你应该做什么?

你可以等到socket.io 0.7发布,它是从头开始设计的,可以在多个进程上使用。

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

I wouldn't use Cluster to scale Socket.IO. Socket.IO 0.6 is designed as a single process server, and it uses long living connections or polling connections to achieve a real time connection between the server and client.

If you put Cluster infront of your socket.io client you will basically distribute the polling transports between different servers, who are not aware of the client. This will result in broken connections. But also broadcasting to all your clients will be a pain as they are all distributed on different servers and you don't have IPC between them.

So I would only advice to use Cluster if you only use Web Socket & Flash Socket connections and don't need to use the broadcast functionality.

So what should you do?

You could wait until socket.io 0.7 is released which is designed from the ground up to be used on multiple processes.

Or you can use pub/sub to send messages between different servers.

拒绝两难 2024-11-13 13:51:17

您可以尝试使用例如 cluster 模块并将负载分配给多个核心(如果您有一个多核CPU)。如果这还不够,您可以尝试使用反向代理在多个服务器之间分发请求,并且< a href="http://redis.io/" rel="nofollow">redis 作为中央会话数据存储(如果可能适合您的场景)。

You can try to use for example cluster module and distribute the load to multiple cores (in case you have a multi-core CPU). In case this is not enough you can try to use reverse proxy for distributing requests across multiple servers and redis as a central session data store (if it's possible for your scenario).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文