Tho*_*omi 72 cross-platform ipc
我正在寻找有关可能的IPC机制的建议:
我的选择是什么?我正在Linux下编程,但我希望将来我写的可以移植到其他操作系统.我曾考虑使用套接字,命名管道或DBus之类的东西.
Dou*_*yle 55
在速度方面,最好的跨平台IPC机制将是管道.但是,假设您希望在同一台计算机上使用跨平台IPC.如果您希望能够与远程计算机上的进程通信,那么您将需要查看使用套接字.幸运的是,如果你至少谈论TCP,那么套接字和管道的行为几乎相同.虽然用于设置和连接它们的API是不同的,但它们都只是像数据流一样.
然而,困难的部分不是沟通渠道,而是你传递给它的信息.你真的想看看会为你执行验证和解析的东西.我建议查看Google的Protocol Buffers.您基本上创建了一个描述要在进程之间传递的对象的spec文件,并且有一个编译器可以生成许多不同语言的代码,用于读取和编写与规范匹配的对象.与尝试自己提供消息传递协议和解析器相比,它更容易(并且更容易出错).
ape*_*arr 10
为什么不是D-Bus?它是一个非常简单的消息传递系统,几乎可以在所有平台上运行,并且具有健壮性.目前几乎所有的脚本语言都支持它.
http://freedesktop.org/wiki/Software/dbus
如果你想要一个便携,易用,多语言和LGPL ed解决方案,我建议你ZeroMQ:
inproc://),进程(ipc://)或机器({tcp|pgm|epgm}://)之间传递消息时使其更有效,并使用智能选项在VMware之间运行连接时削减部分协议开销虚拟机(vmci://).对于序列化,我建议使用MessagePack或Protocol Buffers(其他人已经提到过),具体取决于您的需求.
如何Facebook的节俭?
Thrift是可扩展的跨语言服务开发的软件框架.它将软件堆栈与代码生成引擎相结合,以构建在C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,Smalltalk和OCaml之间高效无缝工作的服务.
我可以建议您使用plibsys C库。它非常简单,轻巧且跨平台。根据LGPL发布。它提供:
使用一个很好的文档库很容易。由于它是用C编写的,因此可以轻松地从脚本语言进行绑定。
如果您需要在进程之间传递大型数据集(尤其是速度至关重要),则最好使用共享内存传递数据本身和套接字,以通知进程数据已准备就绪。您可以按如下方式进行:
该方法可以以跨平台的方式实现。