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