【问题标题】:Horizontally scaling socket.io across multiple Amazon EC2 instances跨多个 Amazon EC2 实例水平扩展 socket.io
【发布时间】:2017-02-03 05:25:54
【问题描述】:

在运行我的节点应用程序的 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 实例?

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

不太确定哪个选项是最好和正确的方法,我们将不胜感激。

【问题讨论】:

    标签: node.js sockets amazon-ec2 redis


    【解决方案1】:

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

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

    【讨论】:

    • 能否请您展示一些代码,说明您的第三台服务器与 reddis 是如何建立的?另外,这个服务器需要超级强大吗?因为如果你的应用明星成长,每个实例请求都会传递给它。
    猜你喜欢
    • 2015-04-07
    • 2011-12-19
    • 2016-03-16
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2012-06-16
    • 2019-02-25
    相关资源
    最近更新 更多