1

一般来说,我对socketcluster和sockets很陌生。所以我使用了来自https://github.com/devonJS/socket-cluster-chat/的终端聊天示例

我想将其扩展到 2 个工人而不是 1 个,特别是我想让第二个工人作为备份。因此,如果第一个工作人员死亡,我希望所有客户端都连接到备份工作人员。应该有可能做到这一点吗?

我已经玩了一点,但我无法做到正确。我真的很感激一个正确方向的指针。我知道还有其他解决方案,例如永远或 nginx,但我想自己实现它,因为我认为只有那时我才理解它。我没有发布代码,因为它很多,但如果需要,我可以编辑它。再次感谢任何指针。干杯

4

1 回答 1

0

Node.js 不支持在进程之间传递实例,并且在大多数情况下,这将是一种反模式。

在 SocketCluster 中,每个客户端套接字在任何给定时间都连接到单个工作人员,如果您有多个工作人员,客户端套接字无法选择它将连接到哪个特定工作人员;默认情况下,SC 使用 Node.js 集群模块的循环算法自动分发客户端。这是一项缓解部分 DDoS 攻击的安全功能(您不想让恶意客户端针对特定的 DoS 工作人员 - 您需要强制它们在工作人员/CPU 内核中均匀分布)。

通常,出于备份目的,最好在不同的主机上启动第二个 SC 实例。

您可以在不同端口上的同一主机上启动第二个 SC 实例,但您应该知道在同一主机上运行两个 SC 实例并不能保护您免受主机或网络故障的影响。

请注意,SC 中的致命(未捕获)错误可能会导致 worker 崩溃,但假设底层主机仍在运行并且仍然连接到 Internet,那么 worker 将几乎立即重新生成。避免不必要的工作程序崩溃的一个好方法是确保您在代码中正确捕获和处理异常(不泄漏内存)。

于 2017-12-30T20:26:09.740 回答