在多台服务器上扩展Socket.IO

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

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

例如,如果服务器A,服务器B和服务器C在LB1(F5)后面,并且用户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 })); 

任何帮助将不胜感激谢谢!

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

然后,只需在代码的顶部添加它,它就可以神奇地工作,没有任何问题。

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