UNPKG

grace-server

Version:

通过cluster集群,加强node服务器的稳定性

63 lines (57 loc) 1.81 kB
/** * @file monitor.js * @author jinjianqi * @description monitor文件的作用是启动和监控grace chlid process,并通过socket和cli通信 */ const utile = require('utile'); const events = require('events'); const path = require('path'); const spawn = require('child_process').spawn; const controler = require('../controler'); const fs = require('fs'); const Monitor = module.exports = function () { this.server = null; this.running = false; this.reStart = false; } // 继承events.EventEmitter类 utile.inherits(Monitor, events.EventEmitter); Monitor.prototype.start = function (daemo = true) { // 创建grace.Log file 收集log日志 if (!fs.existsSync(controler.logDir)) { this.emit('error', new Error(controler.logDir + 'not exists')); return; } const graceLog = daemo ? fs.openSync(path.join(controler.logDir, 'grace.log'), 'a') : 'inherit'; const graceError = daemo ? fs.openSync(path.join(controler.logDir, 'grace.error'), 'a'): 'inherit'; // grace 子进程 const gracePath = path.join(__dirname, '..', 'grace', 'index'); const child = spawn(process.execPath, [gracePath], { stdio: ['ipc', graceLog, graceError], detached: !!daemo }); this.on('restart', () => { child.send('restart'); }) this.on('kill', () => { child.send('kill'); }) this.child = child; if (!this.reStart) { this.reStart = false; this.emit('start'); } child.on('exit', () => { console.log('server exit'); process.nextTick(() => { this.reStart = true; this.start(); }) }) child.on('close', () => { console.log('server close'); }) child.on('error', () => { console.log('server error'); }) }