2012-03-20 28 views
2

給定以下nodejs代碼。當我對localhost:8080運行ab(apache基準測試)測試時,我只看到服務請求的主進程。但是,如果我從主進程中刪除服務器的句柄,那麼我會看到分叉的進程交換進出。我不知道這是否有充分的理由?在主進程和子進程上的服務器上集羣http服務器quandry

var cluster = require('cluster'); 
var server = require('http').createServer(function(req,res){ 
    res.writeHead(200); 
    var served = process.env.NODE_WORKER_ID || "master"; 
    console.log("hello world I was served by " + served); 
    setTimeout(function() { 
    res.end("hello world I was served by " + served); 
    }, 1000); 
}); 
if(cluster.isMaster){ 
    for(var i = 0; i < 2; i++){ 
    cluster.fork(); 
    } 
server.listen(8080); 
}else{ 
    server.listen(8080); 
} 
+0

小紙條bencmark。這是在Linux機器上 – Maleck13 2012-03-20 20:40:33

+0

請仔細標記。這不是一個[tag:cluster-analysis]問題,而只是一個經典的[tag:load-balancing]。我猜,它也可能更適合serverfault。 – 2012-03-21 07:04:31

+0

@ Anony-Mousse不,它顯然是NodeJS的問題,而不是服務器本身。 – Mustafa 2012-03-22 18:51:37

回答

0

因爲是的NodeJS處理1-5 mseconds每個requst因爲主進程沒有做任何事情,只是在睡覺你的要求是永遠不會給予任何的子進程。如果您對數百個併發連接進行測試,您將看到通過聚類獲得的收益。在這裏,我做了一個最近的基準。 http://mustafaakin.wordpress.com/2012/03/19/nodejs-simple-clustering-benchmark/

您可以通過使用Apache Benchmark

+0

我確實使用了Apache基準。使用3000個請求和150個併發。通過上面的代碼,請求永遠不會碰到分叉的進程。但是,如果您從主進程中移除服務器的句柄,則會開始跨進程切換。 – Maleck13 2012-03-20 20:53:40