【问题标题】:Can you consume a NodeJS read stream from another process?您可以使用来自另一个进程的 NodeJS 读取流吗?
【发布时间】:2021-11-14 13:23:16
【问题描述】:

如果我在 nodejs 中打开一个读取流,我可以通过文件系统提供它而不实际将文件写入磁盘吗?那么,另一个应用程序可以指定“somefile.json”,然后像普通文件一样读取该文件?

【问题讨论】:

    标签: node.js stream interprocess


    【解决方案1】:

    是的。数据可以通过网络套接字反弹。但是,如果两个进程在同一 Unix 主机上运行,​​则数据可能会从节点写入命名管道,然后从另一个进程读取。

    命名管道(也称为 fifos)是一种通过操作系统的默认文件系统 API 提供跨进程通信的便捷方法。

    命名管道源可以使用第三方库在 NodeJS 中实例化,并被视为可写流接收器

    import fifo from "mkfifo";
    import util from "util";
    import crypto from "crypto";
    import stream from "stream";
    import fs from "fs";
    
    (async ()=>{
      await new Promise(resolve => fifo.mkfifo("fifo-file", 0o600, resolve));
      
      await util.promisify(stream.pipeline)(
        function*(){
          for(let i=0;i<100;i++){
            yield JSON.stringify({ id: crypto.randomBytes(6).toString("hex") }) + "\n";
          }
        },
        fs.createWriteStream("fifo-file")
      );
    })()
      .catch(console.error);
    

    脚本将在执行时暂停(由于背压),直到其他进程从命名管道中读取。

    【讨论】:

    • 是的,我最终得到了这个工作,命名管道就是我做的。
    猜你喜欢
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多