BOB(中国)官方入口-BOB真人官方

BOB综合网页版

BOB综合网页版 注解失踪on乞求为什么一向挂着?—晓畅Node.jsStream的两栽模式

发布日期:2021-11-21 07:38    点击次数:163

这是自「Nodejs技术栈」交流群一位读者良朋挑的一个题目,“倘若注解失踪req.on,乞求会被一向挂着BOB综合网页版,为什么?”。

倘若你读到这边,也能够先思考下这个题目!

const http = require; 

Node.js的可读流对象挑供了两栽模式:起伏模式或异步迭代能够不会关注到这个题目,在它们的内部实现中已经处理益了,倘若你是基于事件的API处理流,能够会有这些疑问。

起伏模式

起伏模式下数据自动从底层编制获取,并议定EventEmitter挑供的事件接口,尽能够快的挑供给行使程序。必要仔细的是一切的可读流一路先都处于休憩模式,要切换为起伏模式,可议定以下几栽手段实现:

一:注册'data'事件

为可读流对象注册一个'data'事件,传入事件处理函数,会把流切换为起伏模式,在数据可用时会立即把数据块传送给注册的事件处理函数。

这也是上面的疑问,为什么注解失踪'data'事件,乞求就会一向被挂首。

req.on; 
二:stream.pipe手段

调用pipe手段将数据发送到可写流BOB综合网页版。

readable.pipe 

可读流的pipe手段实现中也是注册了'data'事件,一面读取数据一面写入数据至可写流。能够参见笔者之前的这篇文章Node.jsStream模块pipe手段操纵与实现原理分析。

Readable.prototype.pipe = function;     }   }   ... }; 
三:stream.resume手段

stream.resume将处于休憩模式的可读流,恢复触发'data'事件,切换为起伏模式。

对一路先的示例做一个改造,先调用stream.resume用耗尽流中的数据,但此时异国做任何的数据处理,之后会收到end事件。

const http = require; 
四:异步迭代

无需注册事件监听函数,操纵for...awaitof遍历可读流,写法上也很浅易。下例,BOB综合网页版由于用到**顶级await特性**必要在ESModules规范中操纵。

// app.mjs import { createServer as server } from 'http'; import { on } from 'events'; const ee = on; } 

休憩模式

休憩模式也是流一路先时所处的模式该模式下会触发'readable'事件外示流中有可读取的数据吾们必要一向调用read手段调用同样的乞求也会被挂首。

stream.read手段从流缓冲区拉取数据每次返回指定size大幼的数据倘若不指定size则返回内部一切缓冲的数据。

const http = require; 

背压题目思考??

以流的样式从可读流拉取数据到可写流清淡**从磁盘读取数据的速度比磁盘写入的速度是快的倘若可写流不敷消耗数据造成数据积压会怎么样?**也是自「Nodejs技术栈」交流群读者良朋的疑问能够思考下应案能够写在评论区感有趣的关注下「Nodejs技术栈」下一次讲解。

总结

流刚最先处于休憩模式以是注解失踪req.on事件监听乞求才会一向挂首。在基于流的手段读取文件时之前清淡操纵注册'data'事件处理函数的手段从可读流中拉取数据现在Node.js声援了异步迭代更保举你操纵for...awaitof这栽手段读取数据代码望首也会更简洁同步码思想让人也能更益的理解。

本文转载自微信公多号「Nodejs技术栈」能够议定以下二维码关注。转载本文请有关Nodejs技术栈公多号。

数据中央UPS电源七个故障分析 投诉数据通知你“大数据杀熟”有哪些套路? 通信大数据走程卡停业!中国通信院:别急还有其他手段查询 Springboot配置文件、隐私数据脱敏实践 未什么做事最吃香?从领英通知望“数据分析”有多主要