Node.js的子进程spawn的标准输出低“高水位标记”是什么?

5

有没有办法在child_process.spawn()执行时降低stdout的highWaterMark?

我已经读到有一种方法可以为exec降低它,但实际上我需要启动一个进程,通过stdin传递数据并通过stdout读取结果。

高水位标记设置太高导致读取stdout时出现不可接受的延迟。

我尝试将流对象传递给spawn链接:

avconv = spawn("avconv", params, {
  stdio: [process.stdin, process.stdout, process.stderr]
});

现有的代码运行良好,但是当我尝试创建自己的流时,我希望能够定义一个自定义的highWaterMark:

var readable = new stream.Readable();

avconv = spawn("avconv", params, {
  stdio: [process.stdin, readable, process.stderr]
});

Node无法接受它,导致类型错误。


你传递的第二个参数不应该是一个 stream.Writeable 吗?process.stdout 是一个可写流。也许你只需要将 stdio 切换为 [readable, writable, process.stderr] - AlexMA
谢谢您的输入,实际上我已经尝试了所有选项:可读、可写、双工。但我并不确定我需要哪个选项。可读似乎是最合适的选择,因为我从标准输出中读取数据 - 对吗? - sol
1个回答

1

我可以通过设置以下内容来降低子进程stdio流的缓冲区:

child.stdin._writableState.highWaterMark
child.stdout._readableState.highWaterMark

但是该进程似乎还进行了其他缓冲,因此降低这些值可能会有所帮助,也可能不会有太大帮助。

文档表示,传递到stdio选项的流必须具有底层文件描述符,例如附加到文件或套接字的文件描述符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接