我正在尝试在多个 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/