我正在阅读以下文档: 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读取的速度?
答案 0 :(得分:0)
对于双工流(或从双工继承的转换流),可以将readableHighWaterMark
和writableHighWaterMark
都设置为选项。您的示例将变为:
export class JSONParser extends stream.Transform {
constructor() {
super({objectMode: true, readableHighWaterMark: 5, writableHighWaterMark: 3}); // 5 on the readable side, 3 on the writable
}
}
请注意,如果设置了highWaterMark
,它将覆盖readableHighWaterMark
或writableHighWaterMark
(来源:https://github.com/nodejs/node/blob/864860e9f3d4eed0b0b81af55197d7e525ea6306/lib/internal/streams/state.js)。