在两个进程之间传递消息

Posted

技术标签:

【中文标题】在两个进程之间传递消息【英文标题】:Passing messages between two processes 【发布时间】:2017-04-13 09:23:11 【问题描述】:

我正在构建一个有 2 个进程的系统。

流程 1 这个过程实际上是一个Node.js 程序。这个过程实际上是一个 Web Server 处理传入的请求。

流程 2 这个过程实际上是一个C++ 程序。

rc.local的帮助下,这两个进程都会在启动时自动启动

现在,对于Process 1,有一些特定的请求应该传递给Process 2

例如,如果Process 1 在路由/enqueue 收到带有JSON 正文有效负载的发布请求,则Process 1 应将JSON 字符串化并传递给Process 2

Process 2 收到JSON 时,它应该终止一个工作线程并使用该JSON 启动一个新线程来执行实际任务。无论工作线程是否仍在处理之前的JSON,工作线程都应该被杀死

如果两个进程都是Node.js 应用程序,我可以从Process 1 分叉Process 2 并使用以下代码。

process.on('message',function(message)
    //implementation

...
process.send(data);

但我的第二个进程是C++ 应用程序。

关于如何实现它的任何想法?

注意:在标记此问题之前,请记住我不是在寻找完整的代码。我只需要知道如何去做。

【问题讨论】:

通过 FFI 查看 MPI(例如 OpenMPI) 能否使用域 TCP 套接字转换消息,然后解析并在您的 cpp 进程中工作? 【参考方案1】:

您不能为此目的使用 Nodejs 消息传递/事件处理工具,因为它是特定于 Node 的。

您需要使用操作系统的通信设施,例如 Unix、TCP、UDP 套接字或两个进程都可以通信的事件系统,例如 Redis 或 ZeroMQ。

【讨论】:

刚刚检查了 ZeroMQ。看起来真的很有希望。会尽快试一试

以上是关于在两个进程之间传递消息的主要内容,如果未能解决你的问题,请参考以下文章

使用多处理模块在进程之间传递消息

在 Electron 中的两个渲染器进程之间直接通信

nodejs操作消息队列RabbitMQ

RabbitMQ的5种模式

什么是MQ?

请问一下,在C#WPF中我需要写两个应用程序,如何使这两个应用程序之间进行值传递?