主题
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,并在不再使用时关闭或销毁流。
