UNPKG

webappengine

Version:

A web application server that can host multiple web apps running with Node.js.

120 lines (92 loc) 3.94 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _cluster = require('cluster'); var _cluster2 = _interopRequireDefault(_cluster); var _events = require('events'); var _events2 = _interopRequireDefault(_events); var _http = require('http'); var _http2 = _interopRequireDefault(_http); var _settings = require('./config/settings'); var _settings2 = _interopRequireDefault(_settings); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint no-console: 0 */ // Module dependencies var eventEmitter = new _events2.default.EventEmitter(); var createMaster = function createMaster(cluster) { console.log('Starting directory:', process.cwd()); console.log('NodeJS-%s-%s-%s', process.version, process.platform, process.arch); // Fork workers for (var i = 0; i < _settings2.default.cluster.maxWorkers; ++i) { cluster.fork(); } // Event: online cluster.on('online', function (worker) { console.log('The worker #%d(pid=%d) is online', worker.id, worker.process.pid); }); // Event: listening cluster.on('listening', function (worker, address) { console.log('The worker #%d(pid=%d) is listening on %s:%d', worker.id, worker.process.pid, address.address, address.port); }); // Event: disconnect cluster.on('disconnect', function (worker) { console.log('The worker #%d(pid=%d) has disconnected', worker.id, worker.process.pid); }); // Event: exit cluster.on('exit', function (worker, code, signal) { var exitCode = worker.process.exitCode; console.log('The worker #%d(pid=%d) died (%d). restarting...', worker.id, worker.process.pid, exitCode); cluster.fork(); }); }; var createServer = function createServer() { var app = require('./app.multihost').default(); var server = _http2.default.createServer(app); server.on('error', function (err) { eventEmitter.emit('error', err); }); server.setMaxListeners(0); // Set to zero for unlimited server.listen(_settings2.default.port, _settings2.default.host, _settings2.default.backlog, function () { // Lower the process privileges by setting the UID and GUID after the process has mound to the port. if (_settings2.default.uid) { process.setuid(_settings2.default.uid); } if (_settings2.default.gid) { process.setgid(_settings2.default.gid); } eventEmitter.emit('ready', server); }); return server; }; var serverMain = function serverMain() { if (_settings2.default.cluster.enable) { if (_cluster2.default.isMaster) { // True if the process is a master. createMaster(_cluster2.default); // Event: message Object.keys(_cluster2.default.workers).forEach(function (id) { _cluster2.default.workers[id].on('message', function (msg) { if (msg.cmd === 'bonjour') { console.log('Received a bonjour command from worker #%d(pid=%d)', undefined.id, undefined.process.pid); undefined.send({ reply: 'ok' }); } }); }); } else if (_cluster2.default.isWorker) { // True if the process is not a master (it is the negation of cluster.isMaster). createServer(); // Event: message process.send({ cmd: 'bonjour' }); process.on('message', function (msg) { console.log('Received a bonjour reply from master: %s', JSON.stringify(msg)); }); } } else { // Debugging Clustered Apps with Node-Inspector // http://strongloop.com/strongblog/whats-new-nodejs-v0-12-debugging-clusters/ createServer(); } return eventEmitter; }; exports.default = serverMain;