like-process
Version:
Handle resources and events for gracefully exit
57 lines (44 loc) • 1.66 kB
JavaScript
const like = require('../index.js');
const NAME = like.isMaster ? 'master' : 'worker';
console.log(NAME, process.pid, 'started');
if(like.isMaster) {
like.fork();
return;
}
//only for native cluster, in case of failure like uncaught exception:
like.fallback = true; //default true -> like.reload() and false -> like.exit()
// default exit code when there is a uncaught exception
like.exitCode.exception = 1; // default 1, set as false to disable exit code setting
// default exit code when there is an unhandled rejection
like.exitCode.rejection = 1; // default 1, set as false to disable exit code setting
const app = require('express')();
app.get('/', (req, res) => {
res.set('connection', 'close');
res.send('short with ' + process.pid);
});
setTimeout(() => {
const serverA = app.listen(3000, () => console.log('listening', process.pid));
like.handle(serverA);
}, 500);
setTimeout(() => {
const serverB = app.listen(3001, () => console.log('listening', process.pid));
like.handle(serverB, (evt, arg1) => {
//console.log(evt === 'server'); //true
//console.log(arg1 === serverB); //true
});
}, 500);
like.on('cleanup', () => {
console.log(NAME, process.pid, 'cleanup');
setTimeout(() => console.log(NAME, process.pid, 'cleanup async'), 500);
});
like.handle('uncaughtException', (evt, arg1) => {
console.error(arg1);
});
setTimeout(() => {
this_var_not_exists;
//also try changing fallback to false
}, 3000);
//also can remove default listeners
//process.removeListener('SIGTERM', like.exit);
//process.removeListener('SIGINT', like.exit); //only on pm2 cluster
//process.removeListener('SIGHUP', like.reload);