我正在寻找有关可能的 IPC 机制的建议,这些机制是:
- 跨平台(至少 Win32 和 Linux)
- 在C++以及最常见的脚本语言(perl、ruby、python 等)中易于实现。
- 最后,从编程的角度来看,使用简单!
我的选择是什么?我在 Linux 下编程,但我希望我写的东西将来可以移植到其他操作系统。我考虑过使用套接字、命名管道或 DBus 之类的东西。
我正在寻找有关可能的 IPC 机制的建议,这些机制是:
我的选择是什么?我在 Linux 下编程,但我希望我写的东西将来可以移植到其他操作系统。我考虑过使用套接字、命名管道或 DBus 之类的东西。
在速度方面,最好的跨平台 IPC 机制将是管道。但是,这假设您希望在同一台机器上跨平台 IPC。如果您希望能够与远程机器上的进程通信,则需要考虑使用套接字。幸运的是,如果您至少在谈论 TCP,套接字和管道的行为几乎相同。虽然用于设置和连接它们的 API 不同,但它们都像数据流一样工作。
然而,困难的部分不是沟通渠道,而是你通过它传递的信息。你真的很想看看可以为你执行验证和解析的东西。我建议查看 Google 的Protocol Buffers。您基本上创建了一个描述要在进程之间传递的对象的规范文件,并且有一个编译器可以生成多种不同语言的代码,用于读取和写入与规范匹配的对象。这比尝试自己提出消息传递协议和解析器要容易得多(并且不易出错)。
对于 C++,请查看Boost IPC。
您也可以为脚本语言创建或找到一些绑定。
否则,如果能够与脚本语言交互真的很重要,那么最好的选择就是使用文件、管道或套接字,甚至是 HTTP 等更高级别的抽象。
为什么不是 D-Bus?这是一个非常简单的消息传递系统,几乎可以在所有平台上运行,并且专为健壮性而设计。目前几乎所有脚本语言都支持它。
如果您想要一个可移植、易于使用、多语言和LGPL ed 的解决方案,我会推荐您ZeroMQ:
inproc://
如果您在线程 ( )、进程 ( ipc://
) 或机器 ( )之间传递消息,您可以配置传输协议以提高效率{tcp|pgm|epgm}://
,并使用智能选项来削减部分协议开销,以防 VMware 之间运行连接虚拟机 ( vmci://
)。对于序列化,我会建议MessagePack或 Protocol Buffers(其他人也已经提到过),具体取决于您的需要。
您可能想尝试YAMI,它非常简单但功能强大,可移植,并且绑定了几种语言
Thrift 是一个用于可扩展的跨语言服务开发的软件框架。它将软件堆栈与代码生成引擎相结合,以构建在 C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk 和 OCaml 之间高效且无缝工作的服务。
我想你会想要一些基于套接字的东西。
如果您想要 RPC 而不仅仅是 IPC,我建议您使用 XML-RPC/SOAP 之类的东西,它通过 HTTP 运行,并且可以从任何语言中使用。
YAMI - Yet another Messaging Infrastructure是一个轻量级的消息传递和网络框架。
我可以建议您使用plibsys C 库。它非常简单、轻量级和跨平台。根据 LGPL 发布。它提供:
它很容易使用具有相当好的文档的库。由于它是用 C 编写的,因此您可以轻松地从脚本语言进行绑定。
如果您需要在进程之间传递大型数据集(尤其是在速度很重要的情况下),最好使用共享内存来传递数据本身,并使用套接字来通知进程数据已准备好。您可以按以下方式制作:
这种方法可以以跨平台的方式实现。
分布式计算通常很复杂,建议您使用现有的库或框架,而不是重新发明轮子。之前的海报已经列举了几个这样的库和框架。根据您的需要,您可以选择非常低级别(如套接字)或高级框架(如 CORBA)。不能有一个通用的“使用这个”答案。您需要对分布式编程进行自我教育,然后会发现为工作选择正确的库或框架要容易得多。
存在一个广泛使用的用于分布式计算的 C++ 框架,称为 ACE 和 CORBA ORB TAO(基于 ACE)。有很多关于 ACE 的好书http://www.cs.wustl.edu/~schmidt/ACE/所以你可以看看。小心!
它没有比使用管道更简单的了,我知道的每个操作系统都支持管道,并且几乎可以用每种语言进行访问。
看看这个教程。
到本地主机 FTW 的 TCP 套接字。
Python 有一个非常好的 IPC 库:见https://docs.python.org/2/library/ipc.html
Xojo 通过其IPCSocket 类内置了跨平台 IPC 支持。尽管您显然无法用其他语言“实现”它,但您可以在 Xojo 控制台应用程序中使用它并从其他语言调用它,这对您来说可能非常简单。
在当前时代,有一个非常简单、符合 C++1x、有据可查、兼容 Linux 和 Windows 的开源“CommonAPI”库:CommonAPI C++。
底层 IPC 系统是 D-Bus (libdbus) 或 SomeIP(如果需要)。应用程序接口是使用为该 Franca IDL 语言量身定制的简单语言指定的。