我使用 Cluster 来解决单线程可靠性问题。Cluster是内置库之一,您可以将其配置为启动一个或 (n) 个工作程序实例。通常,您为服务器中的每个 CPU 内核启动一个实例。主进程监视来自工作进程的事件(我不确定进程是否 100% 正确)并且可以捕获终止、记录它们,然后重新启动工作进程。理想情况下,您还希望拥有多个区域性 Web 服务器和一个负载均衡器,可以监控您的 Web 服务器,检测它们何时过载或无响应,并采取适当的措施,例如启动新实例和杀死死的实例
使用集群的典型代码如下所示(基于集群文档中的示例):
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
// restart this instance
cluster.fork();
});
} else {
// create an error handler for uncaught exceptions so we can log them
process.on('uncaughtException', function(err) {
var date = new Date ();
var message = date.toString () + ":UNCAUGHT EXCEPTION\n" + err.stack + "\n";
console.log (message);
process.exit(1); // we will get restarted by the cluster process
});
// 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\n");
}).listen(8000);
}