Cross platform IPC我正在寻找有关可能的IPC机制的建议:
我有什么选择? 我正在Linux下进行编程,但我希望将来编写的内容可移植到其他操作系统。 我曾考虑过使用套接字,命名管道或诸如DBus之类的东西。 在速度方面,最好的跨平台IPC机制是管道。但是,这假定您要在同一台计算机上使用跨平台IPC。如果您希望能够与远程计算机上的进程进行通讯,则可以考虑使用套接字。幸运的是,至少在谈论TCP时,套接字和管道的行为几乎相同。尽管用于设置它们和连接它们的API不同,但是它们都像数据流一样工作。 但是,困难的部分不是通信通道,而是您通过它传递的消息。您确实希望查看可以为您执行验证和解析的内容。我建议查看Google的协议缓冲区。基本上,您将创建一个描述文件,该文件描述了要在流程之间传递的对象,并且有一个编译器以多种不同的语言生成代码,用于读取和编写与该规范匹配的对象。这比尝试自己制定一个消息传递协议和解析器要容易得多(并且不易出错)。
对于C ++,请查看Boost IPC。 否则,如果能够与脚本语言进行交互非常重要,那么最好的选择就是简单地使用文件,管道或套接字,甚至使用更高级别的抽象(例如HTTP)。 为什么不使用D-Bus?这是一个非常简单的消息传递系统,几乎可以在所有平台上运行,并且旨在提高健壮性。目前几乎所有的脚本语言都支持它。 http://freedesktop.org/wiki/Software/dbus 您可能要尝试使用YAMI,它非常简单但功能强大,可移植,并且绑定了几种语言 如果您想要一个便携式,易于使用,多语言和LGPLed解决方案,我建议您使用ZeroMQ:
对于序列化,我会根据您的需求建议使用MessagePack或协议缓冲区(其他也已经提到)。 YAMI-另一个消息传递基础结构是一个轻量级的消息传递和网络框架。 我可以建议您使用plibsys C库。它非常简单,轻巧且跨平台。根据LGPL发布。它提供:
使用一个很好的文档库很容易。由于它是用C编写的,因此可以轻松地从脚本语言进行绑定。 如果您需要在进程之间传递大型数据集(尤其是速度至关重要),则最好使用共享内存传递数据本身,并使用套接字通知进程已准备好数据。您可以按如下方式进行:
该方法可以以跨平台的方式实现。 我想您需要基于套接字的东西。 如果您要使用RPC而不是IPC,我建议使用XML-RPC / SOAP之类的东西,它可以通过HTTP运行,并且可以从任何语言中使用。 Facebook的Thrift怎么样?
分布式计算通常很复杂,因此建议您使用现有的库或框架,而不要浪费时间。先前的张贴者已经列举了其中的一些库和框架。根据您的需求,您可以选择非常低级的框架(例如套接字)或高级框架(例如CORBA)。不能有一个通用的"使用此"答案。您需要对分布式编程进行自我教育,然后发现为工作选择合适的库或框架要容易得多。 有一种广泛使用的用于分布式计算的C ++框架,称为ACE和CORBA ORB TAO(基于ACE)。有关于ACE的非常好的书籍http://www.cs.wustl.edu/~schmidt/ACE/,所以您可以看看。照顾自己! 如果您愿意尝试一些不同的东西,可以使用ZeroC的ICE平台。它是开源的,几乎所有您能想到的OS都支持它,并且具有对C ++,C#,Java,Ruby,Python和PHP的语言支持。最后,它非常容易驱动(语言映射是为适应每种语言而定制的)。它也快速高效。甚至还有用于设备的精简版。 它没有比使用管道更简单的了,据我所知,每种操作系统都支持管道,并且几乎可以使用每种语言进行访问。 查看本教程。 本地FTW的TCP套接字。 Python有一个相当不错的IPC库:请参阅https://docs.python.org/2/library/ipc.html Xojo的IPCSocket类具有内置的跨平台IPC支持。尽管您显然不能用其他语言"实现"它,但是您可以在Xojo控制台应用程序中使用它,并从其他语言调用它,这对于您来说可能很简单。 google protobufs是一个非常糟糕的主意,因为您希望易于维护和调试代码。人们太容易滥用它并使用它来污染您的代码了。 Proto文件很不错,但是它与结构头文件基本相同,并且它生成的代码是完全废话,使您想知道它是否真的是破坏软件项目而不是使它们自动化的隐蔽攻击工具。使用一段时间后,几乎不可能将其从代码中删除。您最好只使用易于调试的修订格式结构的头文件。
如果您确实需要压缩,请远程切换到归档结构的地址/数据映射... |