Node.js使用fork时如何实现子进程等待父进程发送数据?
Node.js fork 子进程等待父进程消息实现方案
现有代码问题
process.on('message')是异步事件注册逻辑,不会阻塞同步代码执行。你写的同步形式wait_and_listen函数注册完监听后会直接返回temp_data,此时父进程消息还未到达,变量值为undefined,运算结果不符合预期。- 子进程同步代码会直接执行到
process.exit(),等不到父进程的两次消息就会提前退出。
修正方案
将消息监听逻辑封装为Promise,用异步流程等待两次消息到达后再执行运算和结果返回,父进程代码无需修改,子进程index2.js修改如下:
let a = 0; // 封装单次消息监听Promise,收到消息后直接resolve function wait_and_listen() { return new Promise(resolve => { // 用once仅监听一次消息,避免重复注册监听导致内存泄漏 process.once('message', data => resolve(data)); }); } // 异步自执行函数处理等待逻辑 (async () => { a += await wait_and_listen(); a -= await wait_and_listen(); process.send(a); process.exit(); })();
运行代码后3秒左右控制台会输出结果20,符合预期效果。
内容的提问来源于stack exchange,提问作者user15573857
相关产品推荐
相关产品推荐

