跨多个Amazon EC2实例横向扩展socket.io

时间:2016-09-26 00:28:03

标签: node.js sockets amazon-ec2 redis

使用运行我的节点应用程序的2台Amazon EC2服务器设置并正常运行。目前位于Application Load Balancer后面。

我正在使用像这样的代码发送套接字消息

const ioredis = require('socket.io-redis');                
io = require('socket.io')(server);

io.adapter(ioredis({
    host: 'localhost',
    port: 6379
}));


io.to('roomName').emit('message', data);

但是,使用socket.io发出消息时,消息仅从源节点服务器广播。

服务器1发出socket.io消息 - >连接到服务器1的任何人都会听到该消息,但连接到服务器2的任何人都没有。

服务器2发出socket.io消息 - >连接到服务器2的任何人都会听到该消息,但连接到服务器1的任何人都不会。

我需要帮助的是如何从服务器1发出socket.io消息,并将其中继到所有其他服务器,也可以在单独的服务器上使用单个redis实例?

OR

让另一台服务器作为套接字发射器,服务器1和服务器2发送和接收套接字消息。

不太确定哪种选择是最佳和正确的方法,任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

我设法通过创建第三台服务器,在其上安装Redis并将所有其他服务器设置为使用该单一redis实例来解决问题。

现在,套接字消息将广播到所有服务器,而不管原始服务器是什么。