【问题标题】:Implementing backpressure in a transform stream在转换流中实现背压
【发布时间】:2019-12-08 17:04:05
【问题描述】:

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

上面写着:

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

“将自动应用背压,但请注意, Transform 流的传入和传出 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.stdinprocess.stdin 被传送到我控制的转换流。如何减慢从标准输入读取的速度?

【问题讨论】:

    标签: node.js stream stdin nodejs-stream


    【解决方案1】:

    对于双工流(或从双工继承的转换流),您可以将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)。

    【讨论】:

      猜你喜欢
      • 2017-05-29
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 2013-12-17
      • 2019-11-22
      • 2021-06-22
      相关资源
      最近更新 更多