2014-04-01 61 views
0

節點集羣提供了一種便捷的方式來分叉子進程以平衡服務器負載,這符合大多數操作系統中傳統fork()系統調用的原理。在官方集羣文檔頁面中,示例代碼演示了主服務器與其工作服務器的不同之處,因爲所有代碼都駐留在同一個文件中,所以非常好。但在現實生活中的項目,我發現不夠詳細的文檔,供用戶在不同情況下都適用的模塊,例如,什麼是使用節點集羣模塊最習慣的方式?

  • 什麼是「服務器」,在server.listen()是什麼意思?只是一個HTTP服務器?
  • 開發人員應該如何將部分感興趣的代碼作爲子進程分叉,這些子進程將與其他代碼在同一進程中運行? (更糟糕的是,子進程可能在工作進程和主進程之間共享狀態依賴關係?)
  • 工作進程如何與任意數據通信?
  • 將子進程中運行的代碼與主進程分開的最佳方式是什麼,還是真的有必要?

任何意見,將不勝感激。謝謝。

回答

0

Node.js Cluster API docs提供了很好的例子。

簡短的回答是Server.listen()是一個節點http服務器。羣集模塊使用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); 
} 
+0

究竟是什麼讓我感到困惑的是,這個可愛的一段代碼沒有工作在Windows上。節點文檔說Windows不支持IPC上的命名管道。那麼,我怎麼可能在Windows機器上使用集羣模塊呢? – elliottye

相關問題