parent
c5d54010bc
commit
528c28587f
@ -7,25 +7,57 @@ processes to handle the load.
|
|||||||
The cluster module allows you to easily create a network of processes all
|
The cluster module allows you to easily create a network of processes all
|
||||||
which share server ports.
|
which share server ports.
|
||||||
|
|
||||||
var cluster = require('cluster');
|
var cluster = require('cluster');
|
||||||
var http = require('http');
|
var http = require('http');
|
||||||
|
|
||||||
if (!cluster.isWorker()) {
|
if (cluster.isMaster) {
|
||||||
// Start the master process, fork workers.
|
// Start the master process, fork workers.
|
||||||
cluster.startMaster({ workers: 2 });
|
cluster.startMaster({ workers: 2 });
|
||||||
} else {
|
} else {
|
||||||
// Worker processes have a http server.
|
// Worker processes have a http server.
|
||||||
http.Server(function(req, res) {
|
http.Server(function(req, res) {
|
||||||
res.writeHead(200);
|
res.writeHead(200);
|
||||||
res.end("hello world\n");
|
res.end("hello world\n");
|
||||||
}).listen(8000);
|
}).listen(8000);
|
||||||
}
|
}
|
||||||
|
|
||||||
If we start it like this
|
Running node will now share port 8000 between the workers:
|
||||||
|
|
||||||
% node cluster server.js
|
% node server.js
|
||||||
Detected 2 cpus
|
|
||||||
Worker 2438 online
|
Worker 2438 online
|
||||||
Worker 2437 online
|
Worker 2437 online
|
||||||
|
|
||||||
Node will automatically share port 8000 between the multiple instances.
|
### exports.startMaster([options])
|
||||||
|
|
||||||
|
Spawns the initial worker processes, one per CPU by default.
|
||||||
|
|
||||||
|
The following options are supported:
|
||||||
|
|
||||||
|
- `filename`: 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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -47,14 +47,8 @@ var workerId = 0;
|
|||||||
var queryIds = 0;
|
var queryIds = 0;
|
||||||
var queryCallbacks = {};
|
var queryCallbacks = {};
|
||||||
|
|
||||||
|
exports.isWorker = 'NODE_WORKER_ID' in process.env;
|
||||||
|
exports.isMaster = ! exports.isWorker;
|
||||||
// Used to check if this process is a worker or not.
|
|
||||||
// Returns boolean.
|
|
||||||
exports.isWorker = function() {
|
|
||||||
return 'NODE_WORKER_ID' in process.env;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Call this from the master process. It will start child workers.
|
// Call this from the master process. It will start child workers.
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user