node.js - 如果 Node 关闭,如何在多个 Node 上处理 socketio

标签 node.js express nginx socket.io socket.io-redis

我正在尝试在多个 Node 上设置 socketio 以实现它们之间的负载平衡。 我在 socketio 文档中想到了这样的东西:Using multiple nodes .

它完美地完成了事件在多个 Node 之间通过 redis 传递的工作,但问题是,例如,我有这种情况:

我已经启动了服务器 A 和服务器 B,并使用负载均衡器 (nginx) 运行

客户端 A 连接到服务器 A。

客户端 B 连接到服务器 B。

有什么方法可以确保如果服务器 A 出现故障( Node 断开连接,或由于任何原因关闭)所有连接到服务器 A 的客户端都应该自动重定向到服务器 B 作为后备? socketio 支持吗?我必须执行哪些手动配置才能确保发生这种情况?

我正在使用带有 nginx 的 Express。

最佳答案

如果您的一个 socket.io 服务器在使用过程中掉线,它的客户端应该(最终)收到 disconnect 消息。您应该组织您的代码,以便您的 disconnect 事件处理程序可以通过您的负载平衡器建立新连接。

我写的是“最终”。服务器崩溃和客户端事件传递之间可能会有几秒钟的时间。您可能想要设置某种保活方案,让您的客户端偶尔发送一个“ping”事件,并期望您的服务器立即做出“pong”响应。然后,如果 ping 在指定时间内没有得到响应,您的客户端可以重新连接,就好像它收到 disconnect 事件一样。

如果您有移动客户端,您需要通过在 wifi 上启动 session ,然后将设备移出 wifi 范围以切换到无线来测试所有这些。

关于node.js - 如果 Node 关闭,如何在多个 Node 上处理 socketio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62552090/

相关文章:

node.js - 检查redis变量是否在nodejs中从外部更改

javascript - Node.js Express Jade 改进 TTFB?

node.js - NodeJS Express - 同一端口上的两个 NodeJS 实例(vhost)

nginx - Shiny 的 Websocket 错误

node.js - "Everything is middleware"

node.js - NodeJS process.spawn - 退出事件未触发

node.js - 将查询数据从函数返回到 james/express.js 页面

javascript - 在javascript中读取sql查询输出

node.js - 每个容器需要多少内存以及cpu nginx和nodejs?

Django nginx 413请求实体太大