gpt4 book ai didi

具有高可用性的 Node.js 和 Socket.io

转载 作者:搜寻专家 更新时间:2023-11-01 00:18:09 25 4
gpt4 key购买 nike

我们有一个 node.js 服务器,主要与 socket.io 一起用于 Web 应用程序中的浏览器内部连接。

我们想要一个高可用性解决方案,理论上由两台 node.js 服务器组成,一台作为主服务器,另一台作为主服务器发生故障时的备用服务器。该解决方案将允许,如果或当主 node.js 服务器出现故障时,备份将接管以提供无缝功能而不会中断。

是否有一种解决方案允许 socket.io 维护多个服务器上的客户端连接数组,而不会重复客户端或发送的消息?

我们应该为 HA 和 node.js 考虑另一种范式吗?

最佳答案

当当前连接的服务器出现故障时,无法在不中断新服务器的情况下让 webSocket 自动故障转移。连接到发生故障的服务器的 webSockets 将死亡。这就是 TCP 套接字的工作方式。

幸运的是,使用 socket.io,客户端会很快意识到连接已丢失(几秒钟内),并且客户端会很快尝试重新连接。如果您的备份服务器立即到位(例如热备用)来处理传入的 socket.io 连接,那么从客户端的角度来看,重新连接将是相当无缝的。从客户端的角度来看,这似乎只是暂时的网络中断。

然而,在服务器上,您不仅需要备份,而且还必须能够恢复每个连接的任何状态。如果连接只是用于传递通知的管道并且是无状态的,那么这很容易,因为接收重新连接的备份服务器将立即投入使用。

如果您的 socket.io 连接在服务器端是有状态的,那么您将需要一种方法来在备份服务器接管时恢复/访问该状态。一种方法是将状态保存在与您的 Web 服务器分开的 Redis 服务器中(尽管您随后也需要为 Redis 服务器制定备份/高可用性计划)。

关于具有高可用性的 Node.js 和 Socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27895953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com