Skip to content

Instantly share code, notes, and snippets.

@45deg
Last active November 24, 2015 17:59
Show Gist options
  • Save 45deg/64e88e0a937beaea5353 to your computer and use it in GitHub Desktop.
Save 45deg/64e88e0a937beaea5353 to your computer and use it in GitHub Desktop.
nodejs cluster module memo

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以外の挙動)
  • cluster.forkとunixのforkは無関係。
  • 子プロセスが死んでも復活させないので自分でなんとかしてねとのこと
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment