grace-server
Version:
通过cluster集群,加强node服务器的稳定性
65 lines (62 loc) • 1.7 kB
JavaScript
const {delay} = require('../util/util');
const {workerNum, graceReloadOnFileChange} = require('./readConfig');
const {onSigterm} = require('./singnal');
const {TaskMannger} = require('./task');
const chokidar = require('chokidar');
const {log, TAGS} = require('../util/log');
let task;
const initWorker = async task => {
// 父进程
for (let i = 0; i < workerNum; ++i) {
task.addWorker();
await delay(1000);
}
}
const watchfiles = task => {
// 监听文件变动
let __curPath = process.cwd();
const watcher = chokidar.watch(__curPath);
const fileChanged = filename => {
if (!graceReloadOnFileChange) {
return;
}
log(`文件变动:${filename}`, TAGS.INFO);
task.graceReload();
}
watcher.on('change', fileChanged);
}
const getTask = (task, cluster) => {
if (!task) {
task = new TaskMannger(cluster);
}
return task;
};
// const onKill = task => sig => {
// log(`
// 收到信号:${sig}
// 重启...`,
// TAGS.INFO
// );
// task.graceReload();
// }
const masterProcess = async cluster => {
task = getTask(task, cluster);
await initWorker(task);
watchfiles(task);
// 退出时重启
// onSigterm(onKill(task));
process.on('message', data => {
console.log('grace get message:' + data);
if (data === 'restart') {
task.graceReload();
}
if (data === 'kill') {
process.disconnect();
setTimeout(() => {
process.exit(1);
}, 1e4);
}
})
log('grace start success', TAGS.SUCCESS);
};
module.exports = masterProcess;