Cluster Node.js v5.1.0 Manual & Documentation https://nodejs.org/api/cluster.html
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 it is an HTTP server
http.createServer(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
}
- プロセスを分散させてlistenできる。
- 分散させたプロセス同士はプロセス間通信でやり取り
- ので、実際に8000でlistenしてるのはmasterで、来たリクエストをRound-Robinで子に渡す(Windows以外の挙動)
- net.listenの方でポートを差し替えている https://github.com/nodejs/node/blob/master/lib/net.js#L1265
- cluster.forkとunixのforkは無関係。
- 子プロセスが死んでも復活させないので自分でなんとかしてねとのこと