|
|
@ -48,22 +48,47 @@ var queryIds = 0; |
|
|
|
var queryCallbacks = {}; |
|
|
|
|
|
|
|
|
|
|
|
exports.start = function() { |
|
|
|
|
|
|
|
// 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.
|
|
|
|
//
|
|
|
|
// options.workerFilename
|
|
|
|
// Specifies the script to execute for the child processes. Default is
|
|
|
|
// process.argv[1]
|
|
|
|
//
|
|
|
|
// options.args
|
|
|
|
// Specifies program arguments for the workers. The Default is
|
|
|
|
// process.argv.slice(2)
|
|
|
|
//
|
|
|
|
// options.workers
|
|
|
|
// The number of workers to start. Defaults to os.cpus().length.
|
|
|
|
exports.startMaster = function(options) { |
|
|
|
amMaster = true; |
|
|
|
|
|
|
|
if (process.argv.length < 1) { |
|
|
|
console.error('Usage: node cluster script.js'); |
|
|
|
process.exit(1); |
|
|
|
if (!options) { |
|
|
|
options = {}; |
|
|
|
} |
|
|
|
|
|
|
|
if (!options.workerFilename) { |
|
|
|
options.workerFilename = process.argv[1]; |
|
|
|
} |
|
|
|
|
|
|
|
var args = process.argv.slice(2); |
|
|
|
var scriptFilename = args.shift(); |
|
|
|
if (!options.args) { |
|
|
|
options.args = process.argv.slice(2); |
|
|
|
} |
|
|
|
|
|
|
|
var cpus = require('os').cpus().length; |
|
|
|
console.error("Detected " + cpus + " cpus"); |
|
|
|
if (!options.workers) { |
|
|
|
options.workers = require('os').cpus().length; |
|
|
|
} |
|
|
|
|
|
|
|
for (var i = 0; i < cpus; i++) { |
|
|
|
forkWorker(scriptFilename, args); |
|
|
|
for (var i = 0; i < options.workers; i++) { |
|
|
|
forkWorker(options.workerFilename, options.args); |
|
|
|
} |
|
|
|
|
|
|
|
process.on('uncaughtException', function(e) { |
|
|
@ -118,7 +143,7 @@ function handleWorkerMessage(worker, message) { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function forkWorker(scriptFilename, args) { |
|
|
|
function forkWorker(workerFilename, args) { |
|
|
|
var id = ++ids; |
|
|
|
var envCopy = {}; |
|
|
|
|
|
|
@ -128,7 +153,7 @@ function forkWorker(scriptFilename, args) { |
|
|
|
|
|
|
|
envCopy['NODE_WORKER_ID'] = id; |
|
|
|
|
|
|
|
var worker = fork(scriptFilename, args, { |
|
|
|
var worker = fork(workerFilename, args, { |
|
|
|
env: envCopy |
|
|
|
}); |
|
|
|
|
|
|
|