node.js child_process spawn stdout lower highWaterMark

时间:2014-03-21 20:40:19

标签: javascript node.js stdout spawn child-process

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

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

highWaterMark设置为高,导致读取标准输出不可接受的延迟。

我试图将流对象传递给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]
});

节点不接受它。导致类型错误。

1 个答案:

答案 0 :(得分:0)

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

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

但是这个过程似乎还有其他的缓冲,所以降低这些可能会有所帮助,也可能没有多大帮助。

文档说传入stdio选项的流必须有一个底层文件描述符,例如附加到文件或套接字的文件描述符。