繁体   English   中英

Node.js 在退出事件时从工作人员发送消息

[英]Node.js send message from worker on exit event

我有一个 Node 应用程序,它通过fork()创建了许多工作进程来自己执行一些任务。 作为副产品,工作人员会生成以 object 形式执行的操作的快照。 每个工作人员都有一个附加到“退出”事件的事件侦听器,此时他们通过process.send()将他们的快照发送回父进程。

这是设置的示例:

// parent.js
const exec = require('child_process');

const worker = exec.fork('worker.js', [], {
  stdio: ['pipe', 'pipe', null, 'ipc']
});

worker.on('message', (snapshot) => {
  // Handle the snapshot sent from worker
});
// worker.js
process.on('exit', () => {
  process.send({ /* snapshot data */ })
});
/* Arbitrary task work */

这是父母/工人 IPC 可接受的模式吗? 具体来说,考虑到exit事件和process.send()的性质,这对在父进程中接收消息的可靠性是否可靠?

beforeExit事件是否更适合这种模式?

在 nodejs 文档中很清楚,您应该只在退出事件中执行同步操作。 exit事件的文档摘录:

侦听器函数只能执行同步操作。 Node.js 进程将在调用“退出”事件侦听器后立即退出,从而导致事件循环中仍在排队的任何其他工作被放弃。

因此,在退出事件中执行异步操作可能是一个废话,这将取决于内部实现以及它是否需要事件循环才能工作。


您可以在beforeExit事件中执行异步操作,因此您可能应该这样做。 来自beforeExit文档的摘录:

当 Node.js 清空其事件循环并且没有额外的工作要安排时,会发出“beforeExit”事件。 通常,Node.js 进程会在没有安排工作时退出,但在 'beforeExit' 事件上注册的侦听器可以进行异步调用,从而导致 Node.js 进程继续。

侦听器回调 function 使用作为唯一参数传递的 process.exitCode 的值调用。

对于导致显式终止的条件,例如调用 process.exit() 或未捕获的异常,不会发出 'beforeExit' 事件。

'beforeExit' 不应用作 'exit' 事件的替代,除非打算安排额外的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM