2

嗨,我正在开发一个 c++ 项目,我试图保持操作系统独立,并且我有两个需要通信的进程。我正在考虑设置第三个进程(可能作为服务?)来异步协调其他两个进程。

客户端 1 会在数据准备好时通知中间进程,并将数据发送给它。然后中间进程将保存这些数据,直到客户端 2 告诉它它已准备好接收数据。如果中间进程还没有收到来自客户端 1 的新数据,它会告诉客户端 2 等待。

由于我试图让这个操作系统保持独立,我真的不知道该使用什么。我已经研究过使用 MPI,但它似乎并不适合这个目的。我还研究了 Boost.ASIO、命名管道、RPC 和 RCF。我目前在 Windows 中编程,但我想避免使用 WIN_API,以便代码可能在 Linux 中编译。

下面是关于这两个过程的更多细节。

我们有一个后端进程/模型(客户端 1),它将通过中间进程从 GUI(客户端 2,用 Qt 编写)接收初始输入。然后模型将继续工作,直到满足结束条件,并在服务器准备好时将数据发送到服务器。GUI 将定期向中间进程询问数据,如果模型尚未更新数据,则会被告知等待。当数据从模型中可用时,如果用户选择这样做,我们还希望能够保留当前会话中的任何先前数据以导出到文件(即,我们希望 GUI 向接口导出(或加载)数据)。

除了遵守上述设计之外,我对后端/模型的修改权限很少。我有相当多的 c++ 经验,但没有太多的并行/异步应用程序经验。非常感谢任何帮助或指导。

4

3 回答 3

1

标准 BSD TCP/IP 套接字大多是平台无关的。它们在 Windows 和 Unices(如 linux)上都有一些细微的差别。

PS windows 不支持 AF_UNIX 套接字。

于 2012-03-12T15:05:03.350 回答
1

我会检查boost.interprocess库。如果两个进程在同一台机器上,它有许多不同的方式在进程之间进行通信,并且以独立于平台的方式进行。

于 2012-03-12T15:06:04.723 回答
0

我不确定您是否考虑过消息传递系统,但如果您在进程之间发送结构化数据,您应该考虑查看 google 协议缓冲区。

这些与消息传递的内容(传递的内容)有关,而不是与传递的方式有关。

boost::asio 是独立于平台的,尽管它并不意味着两端都使用 C++。当然,当您使用 C++ 时,您可以使用 boost::asio 作为传输形式。

于 2012-03-12T16:07:37.707 回答