Node.js Cluster Worker:关闭事件

Posted

技术标签:

【中文标题】Node.js Cluster Worker:关闭事件【英文标题】:Node.js Cluster Worker: Turn off event 【发布时间】:2017-12-29 13:55:49 【问题描述】:

考虑以下node.js 集群配置。如何一转off 回调以防止进一步的消息回调?碰巧没有off 方法。我必须用一个新的回调来更新回调,似乎所有旧的回调都被触发了。

     cluster.on('fork', worker => 
        worker.on('message', msg => // Do something...)
      )

【问题讨论】:

【参考方案1】:

.on() 的反义词是.removeListener(),因为.on() 只是.addListener() 的别名。为什么他们添加了.on() 作为别名,但没有添加.off() 作为别名,我真的不知道(对我来说似乎合乎逻辑)。

但是,为了能够使用removeListener() 删除单个侦听器,您需要为最初附加的函数提供函数引用。所以,你需要保存:

 cluster.on('fork', worker => 
     function msgHandler(msg) 
         // process message
     

     // add event handler
     worker.on('message', msgHandler);

     // then, sometime later, to remove the event handler
     worker.removeListener('message', msgHandler);
 );

如果您只想删除给定事件的所有事件侦听器,则不必保存以前的函数引用:

 cluster.on('fork', worker => 
     worker.on('message', msg => // Do something...)

     // some time later, remove all listeners for a particular message
     worker.removeAllListeners('message');
 );

相关回答:What is the difference between addListener(event, listener) and on(event, listener) method in node.js?

【讨论】:

@anshulkoka - 这能回答你的问题吗?如果是这样,您可以通过单击答案左侧的绿色复选标记向社区表明这一点,这也将为您赢得一些声誉积分。【参考方案2】:

您可以使用 removeListener 方法。 https://nodejs.org/api/events.html#events_emitter_removelistener_eventname_listener

【讨论】:

以上是关于Node.js Cluster Worker:关闭事件的主要内容,如果未能解决你的问题,请参考以下文章

管理 Node.js 进程从未如此优雅

使用 cluster.fork() 调试 Node.js 进程

Node.js:使用 IPC 的 master 和 worker 之间的请求/响应

使用 Node.js/python 的 Producer/Consumer + Worker 架构

nodejs原理&源码赏析深度剖析cluster模块源码与node.js多进程(上)

Node JS worker - 需要他们吗?