跨多个服务器扩展Socket.IO

时间:2015-06-13 18:04:21

标签: node.js express socket.io

我一直在寻找有关为Node.js Socket.IO安装设置多服务器群集的帮助。这就是我想要做的事情:

  • 在F5负载均衡器中有1个VIP,指向运行Express的n个节点服务器,以及Socket.IO
  • 让客户端通过io.connect连接到该1个VIP,然后将其过滤到负载均衡器后面的服务器之一。
  • 当在任何一台服务器上发出消息时,它会发送给正在侦听该事件并通过其他服务器连接的所有用户。

例如 - 如果我们在LB1(F5)后面有服务器A,服务器B和服务器C,并且用户A连接到服务器A,则用户B连接到服务器B,用户C连接到服务器C.

在“聊天”场景中 - 基本上如果从服务器A向message事件发出消息 - 服务器B和C也应该将消息发送到其连接的客户端。我读到这可以使用socket-io.redis,但它需要一个Redis框 - 应该安装哪个服务器?如果所有服务器都连接到同一个Redis框 - 这是否会自动运行?

var io = require('socket.io')(server);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:5)

这个问题的答案是您必须设置一个位于SocketIO群集之外的Redis服务器 - 并且所有节点都连接到它。

然后你只需在代码的顶部添加它,它就可以毫无问题地神奇地工作。

var io = require('socket.io')(server);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));