You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1.8 KiB

Cluster

A single instance of Node runs in a single thread. To take advantage of multi-core systems the user will sometimes want to launch a cluster of Node processes to handle the load.

The cluster module allows you to easily create a network of processes all which share server ports.

var cluster = require('cluster');
var http = require('http');

if (cluster.isMaster) {
  // Start the master process, fork workers.
  cluster.startMaster({ workers: 2 });
} else {
  // Worker processes have a http server.
  http.Server(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
  }).listen(8000);
}

Running node will now share port 8000 between the workers:

% node server.js
Worker 2438 online
Worker 2437 online

exports.startMaster([options])

Spawns the initial worker processes, one per CPU by default.

The following options are supported:

  • workerFilename: script to execute in the worker process, defaults to process.argv[1]
  • args: worker program arguments, defaulting to process.argv.slice(2)
  • workers: the number of workers, defaulting to os.cpus().length

exports.spawnWorker([options])

Spawn a new worker process. This is called within cluster.startMaster(), however it is useful to implement worker resuscitation as described below in the "Common patterns" section.

The options available are identical to cluster.startMaster().

Common patterns

Worker resuscitation

The following is an example of how you may implement worker resuscitation, spawning a new worker process when another exits.

if (cluster.isMaster) {
  cluster.startMaster();
  process.on('SIGCHLD', function(){
    console.log('worker killed');
    cluster.spawnWorker();
  });
}