节点集群提供了一种方便的方法来分叉子进程以平衡服务器负载,这遵循大多数操作系统中传统fork()系统调用的原理。在官方集群文档页面中,示例代码演示了主服务器与其工作服务器的不同之处,因为所有代码都驻留在同一文件中,所以这一点非常好。但在现实生活中,我发现文档不够详细,用户无法在不同情况下应用模块,例如,
server.listen()
中“服务器”的含义是什么?只是一个HTTP服务器?任何建议将不胜感激。感谢。
答案 0 :(得分:0)
Node.js Cluster API docs提供了很好的例子。
简短的回答是Server.listen()是一个Node http服务器。 Cluster模块使用child_process.fork()方法,然后通过IPC使工作程序保持同步。
在文档的这个示例中,请注意主人永远不会调用server.listen()
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');
});
} else {
// 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);
}