繁体   English   中英

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

Node.js send message from worker on exit event

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个 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事件是否更适合这种模式?

1 个回复

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

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

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


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

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

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

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

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

1 node.js产生。 退出事件立即触发

我正在将spawn函数与mjpg_streamer一起使用。 但是,子进程只会在创建后立即退出。 这是我正在使用的代码 运行实际命令本身将返回以下内容: mjpg_streamer命令本质上的作用是启动Web服务器。 退出回调中的代码为1,信号为null 。 不太确定 ...

2 如何在Node.JS进程退出事件上打印输出

考虑以下程序。 上面的程序等待,直到收到终止信号。 当该过程退出时,我希望将“ Hello World”打印为标准输出。 但是,在收到信号后(我已经尝试过SIGTERM,SIGINT,SIGHUP和SIGKILL),应用程序将无法打印该消息。 如果我删除setInterval行,使 ...

3 如何以编程方式退出事件的 node.js/express 路由?

当从客户端发送事件时,我希望能够退出后路由的执行。 我正在使用 socket.io,但我不确定它可以做我想做的事。 我正在使用uploads路由来处理文件,但如果用户删除文件,我希望app.post执行结束,类似于res.end()或return语句。 我在前端的应用程序从用户那里收到一个文件,并 ...

4 在Node.js中发出事件

我有一个库,该库使用要尝试编辑的套接字来发出事件,大致来说,代码如下所示: 我想在_onclose方法中发出一个事件,以便可以执行类似的操作 因为如果我直接访问lib.myData ,它仍然是一个空数组。 但是我正在努力发出一个事件。 我现在得到的是图书馆没有办法。 很明显 ...

6 在node.js中,如何告知发出事件的来源?

有没有办法告诉事件处理程序内部回调哪个函数和/或对象发出(调用)事件? 这是一个示例程序: 另外,如果发出的事件的源来自内置模块中的node.js,则另一种用途。 例如,'错误'事件。 如果我使用公共回调进行错误处理,那么这个回调是否可以知道是谁发出了调用它的事件? ...

7 应用程序退出事件

我正在可可中开发一个应用程序。 我的应用程序最初显示一个弹出表。 我需要知道当我们尝试通过右键单击并在 Dock 中的图标上选择“退出”来退出应用程序时触发了哪个事件,因为我无法退出应用程序,因为弹出表。 我该如何解决这个问题? ...

8 如何在运行的node.js应用程序上从命令行发出事件

我是node.js的新手,正在尝试解决特定任务。 为此,我需要知道如何从命令行触发事件。 假设我在node.js应用程序中有一个函数,我希望每次我通过命令行触发它时都运行它。 和发射器 我知道,我可以从命令行运行函数,例如 但是,如果这样做,它只会运行该应用一次,然后 ...

2018-08-28 07:04:22 0 51   node.js
9 Node.js:我的eventEmitter不会从其构造函数内部发出事件

我在Node.js中使用自定义事件发射器遇到了一些麻烦。 我很确定自己已经正确创建了事件发射器,因为我可以在其实例上触发并捕获事件。 但是,没有触发其构造函数中的任何事件。 它们似乎都存在并且正在正确地注册其侦听器,但是this.emit函数不会执行任何操作。 为了清楚起见,这是 ...

10 Node.js:阻塞线程,直到发出事件为止[关闭]

我正在尝试制作一个具有一些繁重负载处理能力的简单服务器。 我正在使用集群模块来将繁重的工作带给线程,并让Node变得神奇。 问题是:由于我不知道如何构建线程池,因此恐怕会遇到pid限制的麻烦。 问题:假设我不能更改进程标识符的操作系统限制,那么如何在不使用Node的情况下创建一个不死的 ...

暂无
暂无

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

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