Node.js 将http.createServer与集群一起使用时,为什么多次调用提供给http.createServer的回调?
我试图理解集群的工作人员是如何处理http请求的。我从的代码开始,并添加了一些日志记录 我将以下代码放在server.js中,并使用执行该文件: NODE_DEBUG=cluster NODE server.jsNode.js 将http.createServer与集群一起使用时,为什么多次调用提供给http.createServer的回调?,node.js,Node.js,我试图理解集群的工作人员是如何处理http请求的。我从的代码开始,并添加了一些日志记录 我将以下代码放在server.js中,并使用执行该文件: NODE_DEBUG=cluster NODE server.js var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.lo
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log('number of CPUs: ' + numCPUs);
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
console.log('forking worker ' + i);
cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
});
} else {
console.log('worker spawned: ' + cluster.worker.process.pid);
var someVar = {'b': 1};
// Workers can share any TCP connection
// In this case its a HTTP server
http.createServer(function(req, res) {
console.log('someVar.b current value: ' + someVar.b + ". someVar.b will be incremented");
someVar.b = someVar.b + 1;
console.log('Request being processed by worker: ' + cluster.worker.process.pid);
res.writeHead(200);
res.end("hello world\n");
console.log('response ended by worker: ' + cluster.worker.process.pid);
}).listen(8000);
}
具体来说,我希望对于我的服务器的一个请求,以下行只打印一次:
someVar.b current value: X. someVar.b will be incremented
Request being processed by worker: XXX
response ended by worker: XXX
相反,我的函数被同一个工作者执行了两次。有人能解释一下吗?你查过req.url了吗?我打赌这两个请求中有一个是for/favicon.ico
someVar.b current value: X. someVar.b will be incremented
Request being processed by worker: XXX
response ended by worker: XXX