【问题标题】:How to handle socketio on multiple nodes if a node is down如果节点关闭,如何在多个节点上处理 socketio
【发布时间】:2020-10-14 12:54:27
【问题描述】:

我正在尝试在多个节点上设置 socketio 以实现它们之间的负载平衡。 我在 socketio 文档中想出了类似的东西:Using multiple nodes

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

我的服务器 A 和服务器 B 使用负载平衡器 (nginx) 启动并运行

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

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

是否有任何方法可以确保服务器 A 关闭(节点断开连接或因任何原因关闭)连接到服务器 A 的所有客户端都应自动重定向到服务器 B 作为后备? socketio 支持吗?我必须进行哪些手动配置才能确保发生这种情况?

我正在使用 Express 和 nginx。

【问题讨论】:

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


    【解决方案1】:

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

    我写了“最终”。服务器崩溃和客户端事件传递之间可能会经过几秒钟。您可能希望设置某种保活方案,让您的客户端偶尔发送一个“ping”事件,并期望您的服务器有一个提示的“pong”响应。然后,如果ping 在分配的时间内没有得到响应,您的客户端可以重新连接,就像收到disconnect 事件一样。

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

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多