跨多个服务器扩展 Socket.IO

Scaling Socket.IO across multiple servers

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

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

在 "chat" 场景中 - 基本上如果消息从服务器 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 }));