问题标签 [eventemitter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - node.js 中是否有通用机制来超时事件?
我正在学习 node.js,我能找到的大多数示例都是处理简单示例。我更感兴趣的是构建真实世界的复杂系统,并估计基于事件的 node.js 模型如何处理真实应用程序的所有用例。
我想应用的一种常见模式是,如果在特定超时时间内没有发生阻塞执行,则让其超时。例如,如果执行数据库查询需要超过 30 秒,那么对于某些应用程序来说可能太多了。或者如果读取文件需要超过 10 秒。
对我来说,带有超时的理想程序流类似于带有异常的程序流。如果某个事件未在某个预定义的超时限制内发生,则事件侦听器将从事件循环中清除,并改为生成超时事件。此超时事件将有一个备用侦听器。如果事件处理正常,那么超时监听器和事件监听器都会从事件循环中清除。
是否有用于超时处理和清理超时进程的通用机制?我知道某些类型(例如套接字)具有超时参数,但它不是适用于所有事件的通用机制。
node.js - 如何在 node.js 中为自定义 EventEmitter 正确实现暂停/恢复
我正在构建一个报告服务,其中一个进程提交查询,检索令牌,然后将令牌交给另一个进程,我们从中查询报告服务并将结果流回。
鉴于此代码,我应该如何实现阻塞调用,直到暂停为假?
这是一个交互图,解释了我想要实现的目标:
- Web 浏览器向前端 Web 服务器请求报告
- 前端网络服务器向报告服务请求与特定查询相关的令牌
- 同时,报告服务连接到 PostgreSQL 并发送查询
- 前端网络服务器将报告服务的 URL 和令牌返回给网络浏览器
- Web 浏览器使用返回的令牌向报告服务发出 Ajax(长轮询)请求
- 报告服务在行返回 Web 浏览器时对其进行流式传输
因为一切都是异步的,所以第 3 步可能会在 Web 浏览器连接之前开始返回数据,这意味着数据丢失。我可以在内存中缓冲数据,直到客户端回来,但我宁愿阻止数据行的发射,因为这会阻止 RAM 的使用。或者也许我只是在开玩笑,RAM 仍然会在底层库中使用?无论如何,指针表示赞赏!
javascript - 如何在 Node.js 中编写非阻塞代码?
我可以非常轻松地在Node.js中编写非阻塞I/O 。这是整个图书馆的目的。
但是完成的任何计算都是阻塞的。任何通过事件发射器的消息都是阻塞的。
例如,发出事件会立即解决,因此是阻塞的:
除了包装调用nextTick
,我如何使代码非阻塞?
我希望在事件循环的每个周期中尽可能少地进行计算,以便我可以同时为尽可能多的客户端提供服务。
如何以非阻塞方式编写代码?
当我有非阻塞代码时,如何跨多个进程扩展它?
一种选择是等待 WebWorker 子流程 API 完成。
file-io - 在 node.js 中的 writestream 上进行多次写入
我一直在查看 node-dirty 的代码,并注意到在将大量数据写入文件时,原始程序员选择将写入分成几个组并一次发出一个组的写入,但他们作为一个循环的一部分同时发出,无需等待任何回调。我对此有三个问题。我有一个类似的问题要解决。
- 这在某种程度上更有效吗?我也应该捆绑写作吗?
- 我应该如何选择最佳的捆绑包大小?为什么不写一组呢?
- 如果我在 writestream 上注册 on('drain') 事件,它会在所有同时发出的写入完成后仅发出一次吗?还是在每个之后?(我的猜测是前者)
- 如果发出 on('error') 事件,是否也会发出 ('drain') 事件?还是它们相互排斥?
谢谢
javascript - 删除 node.js 事件,监听器也会消失?
如果我删除一个 node.js 事件,监听器也会消失,对吗?我不需要删除其他任何东西吗?
javascript - node.js eventemitter 创建多个对象还是依赖参数?
询问 node.js 中的事件发射器
对于不同的事件,我是否应该在基础对象上创建新的发射器:
或依靠论据触发
推荐什么?
谢谢。
javascript - Node.js - 从模块发出事件的最佳方法
我一直在玩EventEmitter
,但我对我应该如何从模块中实现它感到困惑。我见过几种不同的方法,它们似乎都有效。以下是我见过的一些:
从这里:
但是在“Mastering Node”中,他们这样做了:
(为什么需要 .call 呢?)
然后在我自己的代码中,我尝试了另一种方式:
他们都只是以自己的方式从 EventEmitter 继承,那么最简单的解决方案不是最好的吗?
javascript - 在一个以每个对象为一个类的 NodeJS 游戏中,应该如何处理事件?
在 Javascript/NodeJS 游戏中处理多个类时,我无法确定哪个类应该发出事件以及哪些类应该监听。我正在按照本指南创建事件驱动游戏: http: //pragprog.com/magazines/2011-08/decouple-your-apps-with-eventdriven-coffeescript
我正在编写一个小游戏,并将我的类分成以下控制器:
world - 创建游戏世界并通过多个“回合”来确定一些简单的游戏逻辑(即角色应该移动,塔应该射击)。
塔 - 塔位于 10x10 网格上并有一个范围。当一个物体进入射程时,它可以射击。
暴徒(敌人) - 暴徒在 10x10 网格上生成,每 3 秒移动一次。在某些时候,它会在塔的范围内徘徊。
我整天都在阅读有关 EventEmitters 的信息,但似乎无法找出构建我的事件的正确方法。生物在移动时是否应该触发事件,而塔是否应该监听“移动”事件?或者世界应该控制所有的事件,而塔/暴徒应该听世界?
请参阅下面的示例代码。
背景:我一直在为 NodeJS 开发一个简单的 TowerD 游戏,并决定首先实现服务器。我将所有实体存储在 MongoDB 中,并使用地理空间计算来确定对象是否在拍摄范围内。目前我正在使用一个基本的 3 秒循环来“勾选”游戏和进度逻辑,但我想转向一个真正的事件驱动模型并且正在苦苦挣扎。
世界:
(见完整的world.coffee:https://github.com/bdickason/node-towerd/blob/master/controllers/world.coffee)
塔:
(查看完整的towers.coffee:https://github.com/bdickason/node-towerd/blob/master/controllers/towers.coffee)
小怪:
(参见 mobs.coffee 的完整来源:https ://github.com/bdickason/node-towerd/blob/master/controllers/mobs.coffee )
项目完整来源:https ://github.com/bdickason/node-towerd
任何活动帮助将不胜感激。我已经在 github 上倾倒了大约 15 个 nodejs 游戏,还没有发现有人使用这种模式:(
node.js - Nodejs 回调或 eventEmitter
这是编写nodejs代码的最佳实践。
我当前的代码中有很多回调,降低了可读性。
有什么建议吗?
javascript - Nodejs EventEmitter - 定义侦听器函数的范围
我想要这样的工作:
但是,不幸的是,监听器甚至没有被调用。有没有办法用 EventEmitter 做到这一点?我可以Function.bind
对听众,但是,我真的希望EventEmitter
有一些特殊的(或明显的;)方法来做到这一点......
谢谢您的帮助!