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