我有一个NodeJS子进程正在侦听process.on('message', callback)
的消息,但是进程正在立即退出。根据我的阅读,这不应该发生,因为我有一个等待事件循环的回调,为什么NodeJS退出?
下面的示例代码应该能够作为独立的NodeJS进程运行而不是退出,对吗?
节点版本:7.3.0
示例代码:
function handle(msg) {
//do work here
}
process.on('message', (msg) => {
handle(msg);
}
答案 0 :(得分:1)
这是一个模拟您问题的示例程序。
master.js
const cp = require('child_process');
const child = cp.spawn('node', ['./child.js'], {stdio: ['ipc']})
child.stdout.on('data', data => console.log(data.toString()))
child.send('immediate execute MESSAGE 1')
setTimeout(() => {
child.send('late execute MESSAGE 2 after 4 seconds')
}, 4000)
child.js
function handle(msg) {
console.log('Handling message -> ', msg);
}
process.on('message', (msg) => {
handle(msg);
});
process.on('exit', () => {
process.disconnect();
});
这里要注意的关键事项是 -
child_process.spawn
- spawn返回一个Buffer,你可以在子进程启动后立即开始监听stdout流。{stdio: ['ipc']}
- 此选项允许您使用生成的子进程打开IPC通道。如果要断开孩子的连接,只需使用child.disconnect()
即可。