当前位置:  开发笔记 > 编程语言 > 正文

跨平台IPC

如何解决《跨平台IPC》经验,为你挑选了9个好方法。

我正在寻找有关可能的IPC机制的建议:

跨平台(至少Win32和Linux)

易于在C++中实现以及最常见的脚本语言(perl,ruby,python等).

最后,从编程的角度来看简单易用!

我的选择是什么?我正在Linux下编程,但我希望将来我写的可以移植到其他操作系统.我曾考虑使用套接字,命名管道或DBus之类的东西.



1> Douglas Mayl..:

在速度方面,最好的跨平台IPC机制将是管道.但是,假设您希望在同一台计算机上使用跨平台IPC.如果您希望能够与远程计算机上的进程通信,那么您将需要查看使用套接字.幸运的是,如果你至少谈论TCP,那么套接字和管道的行为几乎相同.虽然用于设置和连接它们的API是不同的,但它们都只是像数据流一样.

然而,困难的部分不是沟通渠道,而是你传递给它的信息.你真的想看看会为你执行验证和解析的东西.我建议查看Google的Protocol Buffers.您基本上创建了一个描述要在进程之间传递的对象的spec文件,并且有一个编译器可以生成许多不同语言的代码,用于读取和编写与规范匹配的对象.与尝试自己提供消息传递协议和解析器相比,它更容易(并且更容易出错).



2> Brian R. Bon..:

对于C++,请查看Boost IPC.
您也可以为脚本语言创建或查找一些绑定.

否则,如果能够与脚本语言接口非常重要,那么最好的办法就是使用文件,管道或套接字,甚至是HTTP等更高级别的抽象.



3> apenwarr..:

为什么不是D-Bus?它是一个非常简单的消息传递系统,几乎可以在所有平台上运行,并且具有健壮性.目前几乎所有的脚本语言都支持它.

http://freedesktop.org/wiki/Software/dbus


我真的不会将d-bus描述为"非常简单".Imho它很复杂.
@kralyk不需要运行dbus守护程序,只需要服务器端和客户端即可,以便一侧可以连接到另一侧。dbus在概念上非常简单,但是直接使用libdbus可能会相当复杂,是的,这就是为什么您最有可能想要使用高级绑定的原因。

4> Peque..:

如果你想要一个便携,易用,多语言和LGPL ed解决方案,我建议你ZeroMQ:

惊人的快速,几乎线性可扩展,仍然很简单.

适用于简单和复杂的系统/架构.

非常强大的通信模式:REP-REP,PUSH-PULL,PUB-SUB,PAIR-PAIR.

您可以配置传输协议,以便在线程(inproc://),进程(ipc://)或机器({tcp|pgm|epgm}://)之间传递消息时使其更有效,并使用智能选项在VMware之间运行连接时削减部分协议开销虚拟机(vmci://).

对于序列化,我建议使用MessagePack或Protocol Buffers(其他人已经提到过),具体取决于您的需求.



5> 小智..:

您可能想尝试YAMI,它非常简单但功能强大,可移植,并且可以绑定少量语言



6> Swaroop C H..:

如何Facebook的节俭?

Thrift是可扩展的跨语言服务开发的软件框架.它将软件堆栈与代码生成引擎相结合,以构建在C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,Smalltalk和OCaml之间高效无缝工作的服务.


听起来像很多开销.

7> Douglas Leed..:

我想你会想要基于套接字的东西.

如果您想要RPC而不仅仅是IPC,我建议像XML-RPC/SOAP一样运行在HTTP上,并且可以使用任何语言.



8> mloskot..:

YAMI - 另一种消息传递基础设施是一种轻量级的消息传递和网络框架.



9> 小智..:

我可以建议您使用plibsys C库。它非常简单,轻巧且跨平台。根据LGPL发布。它提供:

命名系统范围的共享内存区域(System V,POSIX和Windows实现);

为访问同步指定系统范围的信号灯(System V,POSIX和Windows实现);

基于共享内存和信号量命名系统范围的共享缓冲区实现;

具有IPv4和IPv6支持的套接字(TCP,UDP,SCTP)(UNIX和Windows实现)。

使用一个很好的文档库很容易。由于它是用C编写的,因此可以轻松地从脚本语言进行绑定。

如果您需要在进程之间传递大型数据集(尤其是速度至关重要),则最好使用共享内存传递数据本身和套接字,以通知进程数据已准备就绪。您可以按如下方式进行:

一个进程将数据放入共享内存段,并通过套接字向另一个进程发送通知;由于通知通常很小,因此时间开销很小;

另一个进程接收该通知并从共享内存段中读取数据;之后,它会向第一个进程发送一条通知,告知已读取数据,以便可以提供更多数据。

该方法可以以跨平台的方式实现。

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有