【问题标题】:Sender of event in NodeJS EventEmitterNodeJS EventEmitter 中的事件发送者
【发布时间】:2017-10-15 20:16:16
【问题描述】:

在一个分叉多个子进程的 NodeJS 应用程序中,我需要知道子进程何时退出,问题是 EventEmitter 调用的回调函数没有事件的发送者。

我做过很多.NET开发,他们的事件总是有sender参数和arguments参数。

我如何知道是哪个子进程发送了事件?

我可以做类似的事情

const childProcess = fork(...) childProcess.on('exit', function(code, signal) { myCallback(childProcess, code, signal); }

但是我将无法从该特定事件处理程序中注销。

【问题讨论】:

  • 对不起,你是说你现在需要知道是谁将终止信号发送到你的childProcess?为什么?
  • 在 Javascript 中,当事件处理程序被调用时,您可以访问父范围,并且您可以安排父范围中有一个变量来标识它是哪个子进程。如果您向我们展示您如何创建多个子进程的更大背景,那么我们可以更具体地为您提供建议。

标签: node.js eventemitter


【解决方案1】:

答案是this 将被设置为引用发件人。

来源https://nodejs.org/api/events.html

eventEmitter.emit() 方法允许任意参数集 传递给监听函数。记住这一点很重要 当 EventEmitter 调用一个普通的监听函数时, 有意设置 this 关键字的标准以引用 监听器所附加的 EventEmitter。

【讨论】:

    【解决方案2】:

    cluster.worker.pid 通常是获取进程 ID 的好方法(因为 fork 会导致此类事件)。

    console.log(cluster.worker.pid);

    【讨论】:

    • 谢谢,但是在父进程中,我监听了几个子进程的“退出”事件,我需要知道哪个子进程发送了事件。 process.pid 将始终给我父进程 pid
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2017-05-10
    • 2016-03-30
    • 1970-01-01
    • 2016-04-18
    • 2016-11-03
    相关资源
    最近更新 更多