我们一直在使用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;
}
鉴于主服务器实际上并没有做任何事情,是否需要使用
forever
,supervisor
等“保护”它?在任何情况下,主机可能会崩溃,自动重启会有所价值吗? 最佳答案
我认为,无需监视集群中的主进程,因为您将无法处理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);
}