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面白いなー。