hot reload的なもの
疑似hot reloadなのだろうけど。
cluster-master.js
var cluster = require('cluster'), fs = require('fs'), path = require('path'); cluster.setupMaster({ exec: path.join(__dirname, 'cluster-worker.js') }); cluster.on('exit', function(worker, code, signal) { console.log(worker.process.pid); cluster.fork(); }); cluster.fork();
cluster-worker.js
var http = require('http'), server = http.createServer(); server.on('close', function() { console.log('closed'); process.exit(); }); server.on('request', function(req, res) { if (req.url === '/close') { req.connection.end(); req.connection.destroy(); server.close(); return; } res.writeHead(200, { 'Connection': 'close' }); res.end('Hello!\n'); }); server.listen(3000, function() { console.log('port 3000'); });
$ node cluster-master.js
port 3000
これでhttp://localhost:3000/closeにアクセスすると……
$ node cluster-master.js port 3000 closed [pid] port 3000
で再起動します。cluster-worker.jsのコードを書き換えておくと、書き換えた後のコードで起動します。
cluster面白いなー。