Nodeでは、クラスタを簡単に実装できます。こんなに簡単でいいのか。
server.js
var cluster = require('cluster'); var http = require('http'); // CPUの数 var numCPUs = require('os').cpus().length; if(cluster.isMaster) { for(var i=0; i<numCPUs; i++) { // マスターだったらforkします var worker = cluster.fork(); console.log('worker forked: pid=' + worker.pid); } // worker終了時のイベントハンドラ cluster.on('death', function(worker) { console.log('worker ' + worker.pid + ' died'); }); } else { // サーバー起動 http.Server(function(req, res) { res.writeHead(200); res.end('Hello World\n'); }).listen(3000); console.log('server started: http://localhost:3000/'); } // node終了時に、forkしたworkerを終了します。 // これがないとworkerが終了しないです。 process.on('SIGINT', function() { if(cluster.isMaster) { console.log('master killed: pid=' + process.pid); } else { console.log('worker killed: pid=' + process.pid); } process.exit(0); });
実行結果(CPUが2つの場合)
$ node server.js worker forked: pid=18981 worker forked: pid=18982 server started: http://localhost:3000/ server started: http://localhost:3000/ ^Cmaster killed: pid=18980 worker killed: pid=18982 $ worker killed: pid=18981
起動後、Control+Cで終了すると、master→worker→workerの順に終了するのがわかります。
CPUを沢山お持ちの方は、負荷テストするとその効果がわかります。
0 件のコメント:
コメントを投稿