Skip to content

Stream 与背压

流用于分块处理数据,避免一次性把大文件或大响应全部载入内存。常见类型:可读流(Readable)、可写流(Writable)、双工流(Duplex)、转换流(Transform)。

pipeline

组合流时优先使用 pipeline,它会转发错误并在失败时清理资源。

js
import { once } from 'node:events'
import { createReadStream, createWriteStream } from 'node:fs'
import { pipeline } from 'node:stream/promises'
import { createGzip } from 'node:zlib'

await pipeline(createReadStream('app.log'), createGzip(), createWriteStream('app.log.gz'))

背压

writable.write(chunk) 返回 false 说明写入端缓冲区已满。手动写入时暂停读取,等待 drain 后恢复;pipe()pipeline() 会自动处理背压。

js
if (!writable.write(chunk)) {
  await once(writable, 'drain')
}

流也是 EventEmitter。手动监听时必须处理 error,并在不再使用时关闭或销毁流。

基于 MIT 许可发布