|
|
|
## 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();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|