概述
NodeJs 中的 Webstream 有助于为浏览器应用程序处理小尺寸的数据。网络流使我们能够以小块的形式处理大量数据。因此,Webstreams 有助于在处理数据时减少负载并消耗更少的内存。node js 中的 Webstream 有助于压缩数据、解压缩数据、编码数据、解码数据和应用视频效果。我们还可以在 nodejs 中使用 webstreams 对 HTTP 响应进行编码和解码。
介绍
想想看,你点了一个披萨。现在有两种吃披萨的方法。
- 第一:一次吃一整块披萨。
- 第二:将其分成小块。
你会选择第二种方式,因为咀嚼和吃小块披萨既容易又舒适。同样,我们使用流来获取、处理和提供小块数据。这些小块称为块。
因此,我们使用流来处理大量数据块。此数据的源可以是任何类型,如文本文件、javascript 文件或服务器代码。Node js 中的 Webstreams 允许我们使用 WHATWG Streams 标准,该标准可作为 Web Streams API 使用。我们可以使用 Web Stream API 来读取数据、馈送数据和转换数据。通常,节点模块 stream/web 用于创建流并利用 Web Streams API。
注意:WHATWG 代表 Web 超文本应用技术工作组。WHATWG 是一个实施 Web 技术标准的社区。
流的类型
- 通常,Node Js 中有三种类型的 Webstream:
- 可读流
- 可写流
- 转换流
- 现在,我们将创建一个文件夹 nodejs-web-streams,转到当前文件夹并启动一个节点项目。
mkdir nodejs-web-streams
cd nodejs-web-streams
npm init -y
- 最初,我们的文件夹结构如下所示。
nodejs-web-streams/
├─ readableStream.js
├─ writableStream.js
├─ transformStream.js
└─ package.json
可读流
可读的 Stream 就像一个可供读取的数据源。我们使用 ReadableStream 类来创建可读流的实例。ReadableStream 有两个参数:underlyingSource 和 queuingStrategy 。这两个参数都是可选的。
-
underlyingSource:一个对象,用于决定流如何操作和处理块。它具有以下方法和属性。
- start(controller):当我们创建可读流的实例时,start 方法会立即执行。参数控制器控制添加到内部队列的数据。
- pull(controller):此方法的工作方式与 start(controller) 方法相同。但是,每当流的内部队列变为空时,就会调用它以获取更多数据(如果可用)。
- cancel(reason):当我们取消流时调用此方法。我们还可以提供取消流的原因。
- type:可以是字节或未定义。type 的默认值设置为 undefined
- autoAllocateChunkSize:它定义块的总大小以确定 AarrayBuffer 的大小。使用 autoAllocateChunkSize 时,我们必须将 type 属性设置为 bytes。
-
queuingStrategy:一个对象有助于控制流中块的流动,并通知内部队列是否已满。它包括以下属性和方法:
- highWaterMark:它表示流可以处理的总块的最高限制。highWaterMark 的默认值设置为 1。
- size():它计算每个块的大小,并且必须返回一个数字。控制器还使用它来计算属性 desiredSize 的值。
可读流的可访问属性和方法
- locked:我们使用 locked 属性来了解可读流是否被锁定。
- cancel():它使用 underlyingSource 对象的 cancel() 方法。我们使用 cancel() 方法来取消流。cancel() 方法返回错误 If a stream is locked。
- getReader():用于获取读取器并锁定当前读取器的流。因此,在使用 releaseLock() 方法解锁流之前,我们不能使用另一个读取器。
- tee():它创建一个可读流的副本,并返回一个由两个可读流组成的数组。
- pipeTo():此方法用于将可读流的块传递给另一个流。 -pipeThrough():用于将可读流的块传递给其他流并转换数据。
可读流示例
1. 创建可读流
// file: readableStream.js
const { ReadableStream } = require("stream/web");
const readableStream = new ReadableStream(
{