master.js 主要处理以下逻辑:
- 创建一个 server 并监听 3000 端口。
- 根据系统 cpus 开启多个子进程
- 通过子进程对象的 send 方法发送消息到子进程进行通信
- 在主进程中监听了子进程的变化,如果是自杀信号重新启动一个工作进程。
- 主进程在监听到退出消息的时候,先退出子进程在退出主进程
- // master.js
- const fork = require('child_process').fork;
- const cpus = require('os').cpus();
-
- const server = require('net').createServer();
- server.listen(3000);
- process.title = 'node-master'
-
- const workers = {};
- const createWorker = () => {
- const worker = fork('worker.js')
- worker.on('message', function (message) {
- if (message.act === 'suicide') {
- createWorker();
- }
- })
- worker.on('exit', function(code, signal) {
- console.log('worker process exited, code: %s signal: %s', code, signal);
- delete workers[worker.pid];
- });
- worker.send('server', server);
- workers[worker.pid] = worker;
- console.log('worker process created, pid: %s ppid: %s', worker.pid, process.pid);
- }
-
- for (let i=0; i<cpus.length; i++) {
- createWorker();
- }
-
- process.once('SIGINT', close.bind(this, 'SIGINT')); // kill(2) Ctrl-C
- process.once('SIGQUIT', close.bind(this, 'SIGQUIT')); // kill(3) Ctrl-
- process.once('SIGTERM', close.bind(this, 'SIGTERM')); // kill(15) default
- process.once('exit', close.bind(this));
-
- function close (code) {
- console.log('进程退出!', code);
-
- if (code !== 0) {
- for (let pid in workers) {
- console.log('master process exited, kill worker pid: ', pid);
- workers[pid].kill('SIGINT');
- }
- }
-
- process.exit(0);
- }
工作进程 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|