节点 IPC 如何在 2 个进程之间工作

Posted

技术标签:

【中文标题】节点 IPC 如何在 2 个进程之间工作【英文标题】:How node IPC works between 2 processes 【发布时间】:2019-08-17 18:22:32 【问题描述】:

使用 nodejs fork 可以在父进程和子进程之间进行 IPC。以前我的印象是子进程会有一个带有文件描述符的额外环境变量。我打印了进程环境,但我看不到任何带有文件 ID 的变量,我也没有看到任何打开的套接字,所以我的问题是节点 IPC 在幕后如何工作?

【问题讨论】:

如果您查看the source code,它看起来可能是一个命名管道。 进一步查看more of the code,似乎 libuv(node.js 使用的跨平台库)有一个Pipe abstraction,它是 Unix 上的域套接字和 Windows 上的命名管道。跨度> 【参考方案1】:

所以我的问题是节点 IPC(用于分叉进程)如何在幕后工作

source code for fork 在内部使用 Pipe 对象。进一步查看 Pipe object,它是 libuv Pipe 对象的包装器。然后,查看libuv,它的 Pipe 抽象是 Unix 上的域套接字和 Windows 上的命名管道。

现在,由于这都是未记录的实现细节,因此没有任何内容表明它必须在未来始终以这种方式进行 - 尽管除非有一个非常好的理由,否则人们不会期望它会改变。

【讨论】:

那么它不应该出现在netstat -l 上还是应该出现一个套接字文件?让我感到困惑的是我没有看到那些(也许我忽略了) @PauloLopes - 也许这会有所帮助:unix.stackexchange.com/questions/270544/…。如果您认为发生了其他事情,请随意浏览 node.js 源代码。我目前的位置没有 *nix 服务器(我假设是您要询问的平台)来亲自尝试。

以上是关于节点 IPC 如何在 2 个进程之间工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重复的情况下在进程之间共享大量数据? (IPC)

可以比 IPC 或套接字更直接地在进程之间进行通信吗?

IPC消息队列如何发送对向量

如何链接 2 个进程,以便当一个进程崩溃时另一个进程也崩溃?

使用互斥锁调节两个进程之间的 IPC

Linux 和 Windows 进程之间的 IPC