跨多个服务器扩展 Socket.IO
Scaling Socket.IO across multiple servers
我一直在寻找有关为 Node.js Socket.IO 安装设置多服务器集群的帮助。这就是我想要做的:
- 在 F5 负载均衡器中有 1 个 VIP,指向
n
数量的节点服务器 运行 Express,并且 Socket.IO
- 让客户端通过
io.connect
连接到那 1 个 VIP,然后让它过滤到负载均衡器后面的服务器之一。
- 当在这些服务器中的任何一个上发出消息时,它会发送给所有正在侦听该事件并通过其他服务器连接的用户。
例如 - 如果我们在 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 }));
我一直在寻找有关为 Node.js Socket.IO 安装设置多服务器集群的帮助。这就是我想要做的:
- 在 F5 负载均衡器中有 1 个 VIP,指向
n
数量的节点服务器 运行 Express,并且 Socket.IO - 让客户端通过
io.connect
连接到那 1 个 VIP,然后让它过滤到负载均衡器后面的服务器之一。 - 当在这些服务器中的任何一个上发出消息时,它会发送给所有正在侦听该事件并通过其他服务器连接的用户。
例如 - 如果我们在 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 }));