Skip to content

Instantly share code, notes, and snippets.

@lvidarte
Created June 27, 2017 20:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lvidarte/4f4575275e9a77954d6cf22eec08accc to your computer and use it in GitHub Desktop.
Save lvidarte/4f4575275e9a77954d6cf22eec08accc to your computer and use it in GitHub Desktop.
Node 8 - Cluster Express server
var cluster = require('cluster');
const PORT = 3000;
if (cluster.isMaster) {
const numWorkers = require('os').cpus().length;
console.log(`Master cluster setting up ${numWorkers} workers...`);
workers = [];
for (let i = 0; i < numWorkers; i++)
workers[i] = cluster.fork();
cluster.on('online', worker => {
console.log(`Worker ${worker.process.pid} is online`);
});
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died with code ${code}`);
console.log('Starting a new worker');
workers[workers.indexOf(worker)] = cluster.fork();
});
/* messages */
cluster.on('message', (worker, message, handle) => {
console.log(`message from worker ${worker.process.pid}: ${message.message}`)
});
setInterval(() => {
workers.forEach(worker => {
worker.send(`hello from master to process ${worker.process.pid}`);
});
}, 10000);
} else {
const app = require('express')();
app.all('/*', (req, res) => {
process.send({message: 'hello from worker'});
res.json({process: process.pid, message: 'Hello'}).end();
})
app.listen(PORT, () => {
console.log(`api on port ${PORT}, pid ${process.pid}`)
});
/* messages */
process.on('message', message => {
console.log(`message from master: ${message}`);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment