socketcluster 将客户端从一个工人传递给另一个工人

socketcluster pass client from one worker to another

总的来说,我对 socketcluster 和套接字还很陌生。所以我使用了来自 https://github.com/devonJS/socket-cluster-chat/

的终端聊天示例

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

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

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

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

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

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

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