如何分发socket.io

bit*_*ter 3 distributed load-balancing node.js socket.io

我使用nodejs和socket.io在我的业务应用程序上提供聊天,但我想分发部署,这样我就可以拥有尽可能多的聊天服务器来平衡流量负载。

我尝试了 nginx 的负载平衡方法,但这只是平衡流量,但 socket.io 服务之间的通信并不相同,因此从用户 A 发送到服务器 S1 的一条聊天消息不会传输到服务器 S2 上的用户 B。

有任何工具或方法可以做到这一点。

提前致谢。

=====编辑=====

这是应用程序的架构。

PHP CodeIgniter 上的主应用程序前端可以将其标记为 PHPCI NodeJs 和 SocketIO 上的聊天应用程序后端可以将其标记为 CHAT Redist 上的聊天模型数据可以将其标记为 REDIST

所以我现在拥有的是 PHPCI -> CHAT -> REDIST。那工作得很好。

我需要的是分发应用程序,这样我就可以拥有我想要的尽可能多的 PHPCI 或 CHAT 或 REDIST,例如

 PHPCI1    CHAT1
 PHPCI2 ->       -> REDIST1
 PHPCI3    CHAT2
Run Code Online (Sandbox Code Playgroud)

其中数字代表实例而不是不同的应用程序。

因此,连接到 PHPCI1 的用户 A 可以向连接到 PHPCI3 的用户 B 发送消息。

我认为 CHAT 中间的某个队列可以处理这个问题,比如rabbitmq,它只能使用 SocketIO 将消息传递给客户端。

Del*_*ney 5

如果您要分配服务器负载(这是一个要求),我建议添加指定的聊天数据服务器(通常是内存数据库或消息队列)来处理跨边缘服务器传递的聊天状态和消息。

Redis Pub/Sub非常适合此目的,甚至可以在低端机器上扩展到疯狂的水平。Redis Cookbook有一专门介绍了这个用例。