【问题标题】:How To Duplicate Node.js / Socket.io Server如何复制 Node.js / Socket.io 服务器
【发布时间】:2017-02-05 00:59:58
【问题描述】:

我是 Node.js 和 Socket.io 的新手,对于我当前的 Web 开发项目,我设置了一个 Socket.io 聊天室,我需要能够制作很多很多(可能有数百个)它的单独实例。有没有办法做到这一点?

【问题讨论】:

  • 您最好解释一下您的用例,以便我们为您提供更多建议。本质上,每台服务器应该有一个实例,所以如果你想要数百个实例,那么就创建数百个服务器。但是拥有数百个 socket.io 实例似乎不是很自然。
  • 你为什么不只使用一台服务器并让很多客户使用它?聊天室服务器应该没有规模问题。您应该能够使用一台服务器托管数千名用户。这是服务器的正常用例。

标签: javascript node.js socket.io chatroom


【解决方案1】:

在节点中生成一个子进程非常简单,尤其是如果它是另一个节点进程。

child_process.fork 是可用选项之一

import cp = require('child_process');

var proc = cp.fork('path/to/module');
proc.on('error', function(err) {
  console.error('The process failed to start');
  console.error(err);
});

proc.on('exit', function(code, signal) {
  console.log('The process was terminated by ' + signal + ' and exited with code ' + code);
});

您可能还想查看cluster,它使用child_process.fork 来生成子进程,但在其上构建了额外的功能,可以在进程之间自动共享资源,例如服务器句柄。

虽然我不确切知道您打算如何使用数百个子节点,但我建议将子节点限制在机器上可用的内核数。产生数百个孩子可能会阻碍性能。您应该依靠节点的异步特性来处理可伸缩性,生成工作器除了平衡可用 CPU 之间的处理负载之外并没有太大帮助。

【讨论】:

  • 虽然这在技术上是创建大量实例的答案,但这可能不是 OP 应该做的。他们可能应该有很多用户使用一台服务器,而不是很多服务器。
  • 哦,你也不能让所有的服务器实例监听同一个端口。
猜你喜欢
  • 1970-01-01
  • 2016-11-08
  • 2016-05-11
  • 2016-05-24
  • 2012-01-27
  • 1970-01-01
  • 2018-01-19
  • 2020-04-07
  • 2019-06-20
相关资源
最近更新 更多