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

时间:2017-10-30 11:36:38

标签: node.js socketcluster

我对socketcluster和socket很新。所以我使用了https://github.com/devonJS/socket-cluster-chat/

中的终端聊天示例

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

我已经玩过一点但我无法做到。 我真的很感激指向正确的方向。我知道还有其他解决方案,比如forever或nginx,但我想自己实现它,因为我认为只有这样才能理解它。我没有发布代码,因为它相当多,但我可以编辑它,如果需要的话。 再次任何指针将不胜感激。 干杯

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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