我正在寻找可能的IPC机制建议,它们需要满足以下条件:
- 跨平台 (至少支持Win32和Linux)
- 在C++以及最常见的脚本语言(perl、ruby、python等)中实现简单
- 从编程角度看,易于使用!
我的选择有哪些?我正在Linux下编程,但我希望将来所写的代码可以在其他操作系统上移植。我曾考虑使用套接字、命名管道或类似DBus的东西。
我正在寻找可能的IPC机制建议,它们需要满足以下条件:
我的选择有哪些?我正在Linux下编程,但我希望将来所写的代码可以在其他操作系统上移植。我曾考虑使用套接字、命名管道或类似DBus的东西。
就速度而言,最好的跨平台进程间通信(IPC)机制将是管道(pipes)。不过,这假定你想要在同一台机器上进行跨平台IPC。如果你想要与远程机器上的进程通信,那么你需要考虑使用套接字(sockets)。幸运的是,至少对于TCP来说,套接字和管道表现出几乎相同的行为。虽然它们的设置和连接API不同,但它们都只是像数据流一样工作。
然而,困难的部分并不是通信渠道,而是你传递的消息。你真的希望找到一个可以为你执行验证和解析的东西。我建议看看Google的 Protocol Buffers 。你基本上创建一个规范文件,描述你想在进程之间传递的对象,然后有一个编译器会生成符合规范的对象的读写代码,支持多种不同语言。它比尝试自己设计消息协议和解析器要容易得多(也更少错误)。
inproc://
),进程(ipc://
)或计算机之间({tcp|pgm|epgm}://
)传递消息更加高效,并智能地选择一些选项来削减在VMware虚拟机之间运行连接时的协议开销(vmci://
)。对于序列化,我建议使用MessagePack或Protocol Buffers(其他人也已经提到了),具体取决于你的需求。
为什么不考虑使用D-Bus呢?它是一个非常简单的消息传递系统,可在几乎所有平台上运行,并专门设计用于增强鲁棒性。目前,它得到了几乎所有脚本语言的支持。
我建议您使用plibsys C库。它非常简单、轻量级且跨平台。采用MIT许可证发布。它提供了以下功能:
这是一个易于使用的库,文档相当不错。由于它是用C语言编写的,您可以轻松地从脚本语言中进行绑定。
如果您需要在进程之间传递大型数据集(特别是速度至关重要时),最好使用共享内存来传递数据本身,并使用套接字通知进程数据已准备就绪。您可以按照以下方式进行操作:
这种方法可以以跨平台的方式实现。
那么Facebook的Thrift怎么样?
Thrift是一个用于可扩展跨语言服务开发的软件框架。它结合了一个软件堆栈和一个代码生成引擎,以构建能够在C ++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk和OCaml之间高效无缝工作的服务。
我认为您需要基于套接字(socket)的解决方案。
如果您需要远程过程调用(RPC)而不仅仅是进程间通信(IPC),我建议使用类似于XML-RPC/SOAP的技术,其可以通过HTTP运行,并且可以被任何语言使用。