【发布时间】:2014-06-27 11:03:40
【问题描述】:
我正在尝试将一个巨大的 json 字符串从子进程发送到父进程。我最初的方法如下:
孩子:
process.stdout.write(myHugeJsonString);
父母:
child.stdout.on('data', function(data) { ...
但现在我read 认为process.stdout 正在阻塞:
process.stderr和process.stdout与 Node 中的其他流不同 写入它们通常是阻塞的。
- 它们在引用常规文件或 TTY 文件描述符的情况下被阻塞。
- 如果他们指的是管道:
- 它们在 Linux/Unix 中阻塞。
- 与 Windows 中的其他流一样,它们是非阻塞的。
documentation for child_process.spawn 表示我可以使用pipe 选项在子进程和父进程之间创建一个管道。但是在 Linux/Unix 中管道不是阻塞我的标准输出(根据上面引用的文档)?
好的,Stream object选项呢?嗯,看来我可以与子进程共享一个指向套接字的可读或可写流。这会是非阻塞的吗?我将如何实现它?
所以问题来了:如何在 Node.js 中以非阻塞方式将大量数据从子进程发送到父进程? 跨平台解决方案会非常简洁,非常感谢带有解释的示例。
【问题讨论】:
-
您是否尝试过使用
stdio: 'ipc'并以这种方式发送/接收消息? -
@mscdex 还没有。这会导致非阻塞数据传输吗? child.send 在我看来也被阻止了。文档说请注意,父子节点上的 send() 方法是同步的 - 不建议发送大块数据(可以使用管道,参见 child_process.spawn)。 我是完全糊涂了。
-
您找到解决方案了吗?我正在尝试使用额外的 stdio 管道(fd >=4)从 .spawn() 流式传输,但找不到让我的子进程将 fd 作为流打开的方式。
标签: node.js child-process