javascript - Node : One Global EventEmitter or every module it's own?

标签 javascript node.js performance events

我目前正计划在 NodeJS 中创建浏览器游戏。游戏将使用事件进行模块之间的基本每次通信。

哪个性能更好(或有优点或缺点?):

我只使用一个(全局?)EventEmitter。每个模块都可以监听该全局事件流或在全局事件流中发出事件。我会使用更复杂的事件名称,因此当触发事件时,并不是调用全局事件流上的所有监听器。我在一个事件流上有大量的听众。

示例:玩家 1 收到一个元素。触发事件“player1:inventory:item”,并且只有 player1 在全局事件流中监听该事件。

它自己的每个模块都扩展了 events.EventEmitter 并仅提供该特定对象的事件。每个 EventEmitter 上的监听器数量很少,大多数时候只有一个监听器。

示例:单个玩家有任务日志和库存。我为每个玩家创建一个任务日志和库存实例,将它们保存在一个集合(或玩家对象)中。 player1 的 queSTLog 只监听 player1 的元素栏。


我没有使用 NodeJS 中的 EventEmitter 的经验,只知道当一个事件发射器或事件上有超过 10 个监听器时会出现警告,因为内存泄漏,但我不知道为什么。

我看到了这两个系统的一些优点和缺点,但在技术方面我需要建议。

感谢您的帮助!

最佳答案

这取决于您在应用程序中使用的事件样式或事件样式的组合。如果您使用广播样式,其中多个订阅者订阅一个 channel /主题并且多个发布者发布到该 channel /主题,那么 EventEmitter 实例必须存在于对其发布者和订阅者来说是“全局”的东西中。使用广播方式,发布者和订阅者都不需要了解对方。

如果您的事件是点对点风格的,其中每个订阅者订阅一个它引用的发布者,那么订阅者必须知道发布者,并且订阅者必须在发布者之前实例化。

这两种样式都可以通过全局单例 EventEmitter(使用事件命名空间)或每个模块 EventEmitter 来实现,但是全局 EventEmitter 更适合广播风格,而每个模块 EventEmitter 更适合广播风格点对点。

关于javascript - Node : One Global EventEmitter or every module it's own?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29149503/

相关文章:

javascript - MEAN : A file uploaded ignores completely the req. on() NodeJS 方法

ruby-on-rails - Rails 雷 : How to specify total_count for paginate?

javascript - 如何在React中垂直滑动文本

node.js - 错误 : Can't set headers after they are sent after res. 渲染()调用

javascript - react : update component's props from outside of render method without using state

javascript - 在 Node js 中安装 udev 模块时出现错误

c++ - 为什么指针更快更高效

c# - 在 C# 中重用数组

javascript - 组件重新渲染时 'remaining' 代码执行会发生什么情况?

javascript - 在 php 中添加 margin-left,脚本