具有多个“数据”事件处理程序和竞争条件的 NodeJS 流
NodeJS stream with multiple 'data' event handler and race condition
我想在两个单独的 Koa 中间件中多次使用 NodeJS 请求流,所以我将侦听器添加到它的"data"事件中。它现在可以工作了,但是我担心它背后有一个竞争条件,因为 - 根据文档 - 添加第一个事件处理程序后,一旦有任何可用数据,流就会开始调用它。如果订阅之间有其他代码,第二个事件侦听器是否未收到所有区块?还是以某种方式避免了(如何?
谢谢!
Node.js流使用 EventEmitter 发送事件。 任何监听事件的人(有多少听众都无关紧要)都将收到该事件。 因此,您的每个订阅者都将获得数据事件。
该文档旨在警告您,通过侦听"data"事件,它将流置于"旧"模式(或流 v1)。这意味着,如果由于某种原因,您的订阅者之一错过了一条消息,它就永远消失了。
但是,Node.js 也支持流管道。 您可以将一个可读流通过管道传输到多个输出流,数据将发送到每个读取器(每个读取器都有一个单独的读取缓冲区)。 同时,如果可读流结束,它将结束两个可写流。 每个流都有自己的读取缓冲区,这意味着如果他们暂时停止收听流(出于某种奇怪的原因),它们不会错过任何消息。
streamA.pipe(streamB)
streamA.pipe(streamC)
相关文章:
- 如何解决取消抖动的用户输入上的竞争条件
- JavaScript 中的竞争条件
- Chrome扩展 chrome.storage 如何同时进行大量获取和设置并避免竞争条件
- 修复在执行http获取请求angularJS时的竞争条件
- JavaScript img.oner更改源-竞争条件时出错
- 使用jQuery提交表单时的竞争条件
- Firefox启动的扩展,在顶级中导入时的竞争条件
- Javascript-在检查对象属性是否存在时避免异步竞争条件
- 使用独立的 AngularJS 控制器修复竞争条件
- jQuery 事件的竞争条件
- 可能的 JavaScript ajax 调用竞争条件
- JS AJAX 提前键入结果排序/竞争条件
- JavaScript 承诺和竞争条件
- 具有多个“数据”事件处理程序和竞争条件的 NodeJS 流
- 在Javascript中竞争条件可能吗?(例如:我想原子地获取和设置值)
- 如何使用getter和setter方法创建一个Angular工厂而不遇到竞争条件
- 如何使用javascript使异步ajax半同步以避免竞争条件
- Koa.js在竞争条件下产生值
- 用于循环ajax潜在竞争条件的Javascript
- 可能的PHP/Javascript竞争条件