Bar*_*vds 9 stream child-process node.js
我在node.js中有一堆(子)进程需要传输大量数据.
当我阅读手册时,它说它们之间的stdio和ipc接口是阻塞的,所以不会这样做.
我正在研究使用文件描述符,但我找不到从它们流式传输的方法(请参阅我的其他更具体的问题如何在节点中流式传输文件描述符?)
我想我可能会使用网络套接字,但我担心这会产生不必要的开销.
我也看到了这一点,但它不一样(并且没有答案:如何在Node.js中以非阻塞方式从子进程向父进程发送大量数据?)
我发现了一个似乎有效的解决方案:在生成子进程时,您可以传递选项stdio并设置管道来传输数据.
诀窍是添加一个额外的元素,并将其设置为'管道'.
在父进程流中child.stdio[3].
var opts = {
stdio: [process.stdin, process.stdout, process.stderr, 'pipe']
};
var child = child_process.spawn('node', ['./child.js'], opts);
// send data
mySource.pipe(child.stdio[3]);
//read data
child.stdio[3].pipe(myHandler);
Run Code Online (Sandbox Code Playgroud)
在文件描述符3的de child open stream中.
// read from it
var readable = fs.createReadStream(null, {fd: 3});
// write to it
var writable = fs.createWriteStream(null, {fd: 3});
Run Code Online (Sandbox Code Playgroud)
请注意,并非您从npm获得的每个流都能正常工作,我尝试了JSONStream.stringify()但是它创建了错误,但是在我通过管道输入之后它才有效through2.(不知道为什么会这样).
编辑:一些观察:似乎管道并不总是双工流,所以你可能需要两个管道.并且有一些奇怪的事情发生在一个案例中,只有我还有一个ipc频道才有效,所以总共6个:[stdin,stdout,stderr,pipe,pipe,ipc].
| 归档时间: |
|
| 查看次数: |
3659 次 |
| 最近记录: |