【发布时间】:2010-09-08 19:21:58
【问题描述】:
我正在寻找有关可能的 IPC 机制的建议:
- 跨平台(至少 Win32 和 Linux)
- 易于在 C++ 以及最常见的脚本语言(perl、ruby、python 等)中实现。
- 最后,从编程的角度来看,使用简单!
我的选择是什么?我在 Linux 下编程,但我希望我写的东西将来可以移植到其他操作系统。我考虑过使用套接字、命名管道或 DBus 之类的东西。
【问题讨论】:
标签: cross-platform ipc
我正在寻找有关可能的 IPC 机制的建议:
我的选择是什么?我在 Linux 下编程,但我希望我写的东西将来可以移植到其他操作系统。我考虑过使用套接字、命名管道或 DBus 之类的东西。
【问题讨论】:
标签: cross-platform ipc
就速度而言,最好的跨平台 IPC 机制将是管道。但是,这假设您希望在同一台机器上跨平台 IPC。如果您希望能够与远程机器上的进程通信,您需要考虑使用套接字。幸运的是,如果您至少在谈论 TCP,套接字和管道的行为几乎相同。虽然用于设置和连接它们的 API 不同,但它们都只是像数据流一样。
然而,困难的部分不是沟通渠道,而是您传递的信息。你真的很想看看可以为你执行验证和解析的东西。我建议查看 Google 的 Protocol Buffers。您基本上创建了一个描述要在进程之间传递的对象的规范文件,并且有一个编译器可以生成多种不同语言的代码,用于读取和写入与规范匹配的对象。这比尝试自己提出消息传递协议和解析器要容易得多(并且不易出错)。
【讨论】:
对于 C++,请查看 Boost IPC。
您也可以为脚本语言创建或查找一些绑定。
否则,如果能够与脚本语言交互真的很重要,那么最好的选择就是使用文件、管道或套接字,甚至是 HTTP 等更高级别的抽象。
【讨论】:
为什么不用 D-Bus?这是一个非常简单的消息传递系统,几乎可以在所有平台上运行,并且专为健壮性而设计。目前几乎所有脚本语言都支持它。
【讨论】:
如果你想要一个可移植、易于使用、多语言和LGPLed 的解决方案,我会推荐你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 class 内置了跨平台 IPC 支持。尽管您显然无法用其他语言“实现”它,但您可以在 Xojo 控制台应用程序中使用它并从其他语言调用它,这对您来说可能非常简单。
【讨论】:
在当前时代,有一个非常简单、符合 C++1x、文档完善、兼容 Linux 和 Windows 的开源“CommonAPI”库:CommonAPI C++。
如果愿意,底层 IPC 系统是 D-Bus (libdbus) 或 SomeIP。应用程序接口是使用为该 Franca IDL 语言量身定制的简单语言指定的。
【讨论】: