2014-10-22 11 views
1

我試圖瞭解如何由羣集的工作人員提供http請求。我從http://nodejs.org/api/cluster.html的代碼開始,並添加了一些日誌記錄。在羣集中使用http.createServer時,爲什麼會向多次調用的http.createServer提供回調?

我把下面的代碼在server.js與執行的文件: NODE_DEBUG =羣集節點server.js

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); 
} 

然後我去爲localhost:8000一次,你瞧,「你好世界「是我的預期。我沒想到的是正在打印兩次一些日誌語句:

number of CPUs: 2 
forking worker 0 
forking worker 1 
535,Master Worker 536 online 
535,Master Worker 537 online 
worker spawned: 536 
worker spawned: 537 
someVar.b current value: 1. someVar.b will be incremented 
Request being processed by worker: 536 
response ended by worker: 536 
someVar.b current value: 2. someVar.b will be incremented 
Request being processed by worker: 536 
response ended by worker: 536 

具體來說,我預計對一個請求到我的服務器,下面的線將只打印一次:

someVar.b current value: X. someVar.b will be incremented 
Request being processed by worker: XXX 
response ended by worker: XXX 

相反我的功能被同一工作人員執行兩次。請問有人可以解釋一下嗎?

回答

0

您是否檢查req.url?我打賭兩個請求中的一個是/favicon.ico

+0

賓果。謝謝。 – 2014-10-22 04:16:43

相關問題