总的来说,我对 socketcluster 和套接字还很陌生。所以我使用了 https://github.com/devonJS/socket-cluster-chat/ 中的终端聊天示例
我想将其扩展到 2 个工作人员而不是一个,特别是我希望有第二个工作人员作为备份。因此,如果第一个工作人员死亡,我希望所有客户端都连接到备份工作人员。应该有可能做到这一点,对吗?
我已经尝试过一些,但我无法做到正确。 我真的很感激您指出正确的方向。我知道还有其他解决方案,例如forever或nginx,但我想自己实现它,因为我认为只有这样我才理解它。我没有发布代码,因为它相当多,但如果需要,我可以编辑它。 再次,任何指示将不胜感激。 干杯
最佳答案
Node.js 不支持在进程之间传递实例,并且在大多数情况下这将是一种反模式。
在 SocketCluster 中,每个客户端套接字在任何给定时间都连接到单个工作线程,如果有多个工作线程,则客户端套接字无法选择它将连接到哪个特定工作线程;默认情况下,SC 使用 Node.js 集群模块的循环算法自动分配客户端。这是一项安全功能,可减轻部分 DDoS 攻击(您不希望允许恶意客户端针对特定的 DoS 工作人员 - 您需要强制它们在工作人员/CPU 核心之间均匀分布)。
通常,出于备份目的,最好在不同的主机上启动第二个 SC 实例。
您可以在同一主机上的不同端口上启动第二个 SC 实例,但您应该注意,在同一主机上运行两个 SC 实例并不能保护您免受主机或网络故障的影响。
请注意,SC 中的致命(未捕获)错误可能会导致工作线程崩溃,但假设底层主机仍在运行并且仍然连接到互联网,那么工作线程几乎会立即重新生成。避免不必要的工作崩溃的一个好方法是确保在代码中正确捕获和处理异常(不泄漏内存)。
关于node.js - socketcluster 将客户端从一个工作线程传递到另一个工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47014305/