NodeJS:如何运行三个服务器作为一个单一的应用程序?

时间:2011-08-31 09:22:36

标签: node.js sysadmin

我的应用程序是使用三个不同的服务器构建的:每个服务器都有不同的用途,它们必须保持分离(至少,使用多个核心)。作为一个例子(这不是真实的东西),您可以将此设置视为一个管理用户身份验证的服务器,另一个用作游戏引擎,另一个用作pubsub服务器。逻辑上,“应用程序”只有一个,客户端根据其特定需要连接到一个或另一个服务器。

现在我正在尝试找出在生产环境中运行这样的设置的最佳方法。

最简单的方法是使用一个bash脚本,一个接一个地在后台运行每个服务器。这种方法的一个问题是,在我需要重新启动“应用程序”的情况下,我应该保存每个服务器的pid并杀死每个。

另一种方法是使用一个节点进程,将每个服务器作为自己的子进程运行(使用child_process.spawn)。节点生成节点。出于某种原因这是愚蠢的吗?这样,当我需要停止/重新启动整个应用程序时,我只有一个进程可以终止。

您怎么看?

3 个答案:

答案 0 :(得分:2)

如果您使用的是Linux或其他* nix操作系统,则可以尝试编写启动/停止/重启应用程序的init脚本。 here's an example.

答案 1 :(得分:1)

使用特定工具进行过程监控。例如,Monit可以通过pid监视进程并在它们死亡时重新启动它们,并且可以使用monit-cmd或使用web-gui手动重启每个进程。

因此,在您的示例中,您将创建3个独立的进程并告诉monit监视每个进程。

答案 2 :(得分:1)

我最终在Node中创建了一个包装器/管理程序脚本,它使用child_process.spawn来执行所有三个进程。

  • 它将每个进程stdout / stderr传递给它的stdout / stderr
  • 它拦截每个进程的错误,记录它们,然后退出(因为它是它的错误)
  • 然后它自行分叉和守护

我可以使用开始/停止范例停止整个事情。

既然我有一个健壮的守护进程,我可以创建一个unix脚本来像往常一样在启动/关闭时启动/停止它(如@Levi所说)

另见我的其他(相关)问:NodeJS: will this code run multi-core or not?