cluster
Created: 2016-05-03 08:48:20 -0700 Modified: 2016-05-03 08:54:51 -0700
Introduction
Section titled IntroductionNodeJS provides a ‘cluster’ module by default. This allows you to start the same program in many different processes and communicate between them.
Logging
Section titled LoggingYou should likely perform logging by sending all log messages over a cluster transport if cluster.isWorker is true. To accomplish this:
- Master
- worker.on(‘message’, handlerFunction)
- Worker
- process.send({type: ‘log’, text: ‘blah’});
Debugging
Section titled DebuggingThe basic template looks something like what’s coded below. Basically, the master needs to specify a custom port for “—debug” for all workers so that they aren’t all listening on the same port.
const env = {
anyEnvVars: ‘go here’
};
// If ‘—debug’ was specified as a flag to the master, then we’ll pass that off
// to the workers with their own specific debugger ports.
//
// Note: despite having ‘—debug’ specified, you may still need to hit the Pause
// button in Chrome or put a ‘debugger’ at the beginning of the game server
// worker.
//
// Note #2: you do not need —debug running on the master in order to debug
// workers.
const debug = process.execArgv.indexOf(‘—debug’) !== -1;
cluster.setupMaster({
execArgv: process.execArgv.filter((arg) => arg !== ‘—debug’)
});
if (debug) {
cluster.settings.execArgv.push(‘—debug=’ + (5859 + workerId));
}
cluster.fork(env);
if (debug) {
cluster.settings.execArgv.pop();
}