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 toprocess.argv[1]
args
: worker program arguments, defaulting toprocess.argv.slice(2)
workers
: the number of workers, defaulting toos.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();
});
}