我正在阅读这些文档:
https://nodejs.org/ja/docs/guides/backpressuring-in-streams/

它说:

Readable.pipe(Transformable).pipe(Writable);



  “反压将自动应用,但请注意,
  转换流的传入和传出highWaterMark可能是
  被操纵,将影响背压系统。”


我可以这样更改highWaterMark

export class JSONParser extends stream.Transform {

  constructor() {
    super({objectMode: true, highWaterMark: 3}); // 3 objects is high water mark
  }

}


但是由于它说转换流的传入和传出highWaterMark都可以被操纵-我如何更改传入/传出数据的highWaterMark?我的猜测是,这一个属性控制两个级别?

本质上,我试图减慢流中的读取量,以便可以处理其他I / O。在我的情况下,可读流是process.stdin,而process.stdin正在通过管道传递给我控制的转换流。如何降低从stdin读取的速度?

最佳答案

对于双工流(或从双工继承的转换流),可以将readableHighWaterMarkwritableHighWaterMark都设置为选项。您的示例将变为:

export class JSONParser extends stream.Transform {

    constructor() {
        super({objectMode: true, readableHighWaterMark: 5, writableHighWaterMark: 3}); // 5 on the readable side, 3 on the writable
    }
}


请注意,如果设置了highWaterMark,它将覆盖readableHighWaterMarkwritableHighWaterMark(源:https://github.com/nodejs/node/blob/864860e9f3d4eed0b0b81af55197d7e525ea6306/lib/internal/streams/state.js)。

10-06 14:17