我们一直在使用forever启动Express应用程序,该应用程序使用cluster生成可以完成所有工作的工作程序。这意味着主服务器仅运行以下代码:

if (cluster.isMaster) {

    // ...
    // ... check arguments and do some initial prep
    // ...

    // Create a worker for each CPU
    for (var i = 0; i < cpuCount; i += 1) {
        cluster.fork();
    }

    // Listen for dying workers
    cluster.on('exit', function (worker) {
        if (!worker.suicide) {
            // Replace the dead worker if not a startup error like port in use.
            console.log('Worker ' + worker.id + ' died. Replacing it.');
            cluster.fork();
        }
    });
    return;
}


鉴于主服务器实际上并没有做任何事情,是否需要使用foreversupervisor等“保护”它?在任何情况下,主机可能会崩溃,自动重启会有所价值吗?

最佳答案

我认为,无需监视集群中的主进程,因为您将无法处理SIGKILL

请参考PM2 implementation as below,实际上是master

var cluster = require('cluster');
var http    = require('http');
var os      = require('os');

var numCPUs = os.cpus().length;

if (cluster.isMaster) {
  // Master:
  // Let's fork as many workers as you have CPU cores

  for (var i = 0; i < numCPUs; ++i) {
    cluster.fork();
  }
} else {
  // Worker:
  // Let's spawn a HTTP server
  // (Workers can share any TCP connection.
  //  In this case its a HTTP server)

  http.createServer(function(req, res) {
    res.writeHead(200);
    res.end("hello world");
  }).listen(8080);
}

07-24 19:53