From a0da548f643877fd7f006ada3f56d19d1856d665 Mon Sep 17 00:00:00 2001 From: Vytor Calixto <vytorcalixto@gmail.com> Date: Tue, 25 Apr 2017 09:32:08 -0300 Subject: [PATCH] Add node cluster library --- src/server.js | 50 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/src/server.js b/src/server.js index ccc5e884..501ddc99 100644 --- a/src/server.js +++ b/src/server.js @@ -1,29 +1,43 @@ -const debug = require('debug')('node-express-base'); - +const debug = require('debug')('simcaq-api'); const libs = `${process.cwd()}/libs`; - const config = require(`${libs}/config`); - const log = require(`${libs}/log`)(module); - const app = require(`${libs}/app`); - const compatVersion = require(`${libs}/middlewares/checkVersion`); +const cluster = require('cluster'); // Check if Node version is compatible if (!compatVersion()) { process.exit(1); } -// Set default port: first environment variable PORT, then configuration and last 3000 -app.set('port', process.env.PORT || config.port || 3000); -process.env.NODE_ENV = process.env.NODE_ENV || 'development'; -// Set default ip: first environment variable IOP, then configuration and last '127.0.0.1' -app.set('ip', process.env.IP || config.ip || '127.0.0.1'); - -const server = app.listen(app.get('port'), () => { - log.info(`Express server listening on port ${server.address().port}`); -}); - -// For testing -module.exports = server; +if(cluster.isMaster) { + log.info(`Master ${process.pid} is running`); + + const numCPUs = require('os').cpus().length; + for(let i=0; i < numCPUs; ++i) { + cluster.fork(); + } + + // Caso uma instâcia morra + cluster.on('exit', (worker, code, signal) => { + log.info(`Worker ${worker.process.pid} died`); + // Revive a instância + cluster.fork(); + }); +} else { + // Set default port: first environment variable PORT, then configuration and last 3000 + app.set('port', process.env.PORT || config.port || 3000); + process.env.NODE_ENV = process.env.NODE_ENV || 'development'; + // Set default ip: first environment variable IOP, then configuration and last '127.0.0.1' + app.set('ip', process.env.IP || config.ip || '127.0.0.1'); + + const server = app.listen(app.get('port'), () => { + log.info(`Express server listening on port ${server.address().port}`); + }); + + log.info(`Worker ${cluster.worker.id} is running`); + + // For testing + module.exports = server; +} -- GitLab