Created
May 31, 2017 23:00
-
-
Save devops-1/0db72a149c608e89b096358c8c8562ec to your computer and use it in GitHub Desktop.
cluster.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var cluster = require('cluster'); | |
var numCPUs = require('os').cpus().length; | |
var _ = require('underscore'); | |
if (!process.env.PORT) { | |
throw new Error('process.env.PORT not set'); | |
} | |
var CLUSTER_ENV_VARS = {}; | |
if (cluster.isMaster) { | |
fork(); | |
} else { | |
require('./app.js'); | |
} | |
/** | |
* fork one process per cpu | |
*/ | |
function fork() { | |
for (var i = 0; i < numCPUs; i++) { | |
var envClone = _.clone(process.env); | |
envClone.PORT = parseInt(process.env.PORT)+i; | |
var worker = cluster.fork(envClone); | |
CLUSTER_ENV_VARS[worker.id] = envClone; | |
} | |
cluster.on('exit', function(worker, code, signal) { | |
console.log('worker %s died, forking again', worker.process.pid); | |
var new_worker = cluster.fork(CLUSTER_ENV_VARS[worker.id]); | |
CLUSTER_ENV_VARS[new_worker.id] = CLUSTER_ENV_VARS[worker.id]; | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment