我在node.js中有一堆(子)进程,它们需要传输大量数据。
当我阅读该手册时,会说它们之间的stdio和ipc接口已阻塞,因此不会起作用。
我正在研究使用文件描述符,但是我找不到从它们流式传输的方法(请参阅我的其他更具体的问题,如何在node中的文件描述符中流式传输/?
我想我可能会使用网络插座,但是我担心会有不必要的开销。
我找到了一个似乎有效的解决方案:生成子进程时,您可以传递选项stdio
并设置管道以流式传输数据。
诀窍是添加一个附加元素,并将其设置为“ pipe”。
在 父 流程中流向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);
在文件描述符的 子 打开流中3。
// read from it
var readable = fs.createReadStream(null, {fd: 3});
// write to it
var writable = fs.createWriteStream(null, {fd: 3});
请注意,并非您从npm获得的每个流都可以正常工作,我尝试了JSONStream.stringify()
一下,但是创建了错误,但是在通过管道传输了它之后,它仍然可以工作through2
。(不知道为什么)。
编辑:一些观察:似乎该管道并不总是双工流,因此您可能需要两个管道。在某些情况下,只有在我也有一个ipc通道的情况下,它才起作用,所以总有6种:[stdin,stdout,stderr,pipe,pipe,ipc],这是一件奇怪的事情。
问题内容: 我一直在努力在DigitalOcean上运行多个Puppeteer实例,但运气不好。我可以使用puppeteer- cluster之 类的工具同时运行〜5个,但是由于某种原因,整个过程几乎没有什么有用的消息。因此,我切换为在没有任何其他库的情况下生成〜5个子进程- 仅是Puppeteer本身。同样的问题。窒息而没有有用的错误。 我可以在本地很好地运行所有这些工作,但是在部署之后,我碰壁
问题内容: 我想知道是否可以使用Node.js将数据从服务器流式传输到客户端。我想将单个AJAX请求发布到Node.js,然后将连接保持打开状态并将数据连续流式传输到客户端。客户端将收到此流并不断更新页面。 更新: 更新-我无法使其正常工作。在你打电话之前不发送。我建立了一个示例程序来实现此目的: Node.js: HTML: 使用这种方法,我打电话之前什么都没拿回来。这是否可能,或者我应该使用长
我完全混淆了,,。 哪个是阻塞,哪个不是? 我的意思是如果我使用父进程是否等待子进程返回/才继续执行。 如何影响这些调用?
问题内容: 当尝试从ImageMagick子进程中读取Node.js中的数据时,它损坏了。 一个简单的测试用例如下: 我希望这等同于可以正确写入二进制文件的命令行。 最初存在maxBuffer选项太小并导致文件被截断的问题。增加该值之后,文件现在看起来比预期的要大一些,并且仍然损坏。来自stdout的数据是通过HTTP发送所必需的。 从ImageMagick stdout读取此数据的正确方法是什么
问题内容: 我正在使用包装节点的库。但是我不知道如何将STDIN传递给子进程execFile … 在CLI上,它看起来像这样: 更新1 尝试使其与: 问题答案: 这是我如何使其工作的方法:
问题内容: 我在命令行中执行的操作: 我想用python做什么: 问题答案: 更新:不鼓励使用,尽管在Python 3中仍然可用。 用途 如果你确实要使用子流程,请使用以下解决方案(大部分内容来自子流程的文档): OTOH,你可以完全避免系统调用: