跨平台IPC
我正在寻找有关可能的IPC机制的建议:
- 跨平台(至少Win32和Linux)
- 易于在C ++和最常见的脚本语言(perl,ruby,python等)中实现。
- 最后,从编程的角度来看简单易用!
我的选择是什么?我正在Linux下进行编程,但我希望将来编写的内容可以移植到其他OS。我考虑过使用套接字,命名管道或者诸如DBus之类的东西。
解决方案
回答
对于C ++,请查看Boost IPC。
我们可能还可以为脚本语言创建或者找到一些绑定。
否则,如果能够与脚本语言进行交互非常重要,那么最好的选择就是简单地使用文件,管道或者套接字,甚至使用更高级别的抽象(例如HTTP)。
回答
Facebook的Thrift怎么样?
Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml.
回答
它并没有比使用管道更简单,因为我所知道的每个操作系统都支持管道,并且几乎可以使用每种语言对其进行访问。
查看本教程。
回答
本地FTW的TCP套接字。
回答
我认为我们需要基于套接字的东西。
如果我们要使用RPC而不是IPC,我建议使用XML-RPC / SOAP之类的东西,它可以通过HTTP运行,并且可以从任何语言中使用。
回答
在速度方面,最好的跨平台IPC机制将是管道。但是,这假定我们要在同一台计算机上使用跨平台IPC。如果我们希望能够与远程计算机上的进程进行通讯,则可以考虑使用套接字。幸运的是,至少在谈论TCP时,套接字和管道的行为几乎相同。虽然用于设置它们和连接它们的API不同,但是它们都像数据流一样工作。
但是,困难的部分不是通信通道,而是我们通过它传递的消息。我们确实希望查看可以为我们执行验证和解析的内容。我建议我们查看Google的协议缓冲区。基本上,我们将创建一个说明文件,该文件描述了要在流程之间传递的对象,并且有一个编译器以多种不同的语言生成代码,用于读取和写入与该规范相匹配的对象。这比尝试自己制定一个消息传递协议和解析器要容易得多(并且不易出错)。
回答
如果我们愿意尝试一些不同的东西,可以使用ZeroC的ICE平台。它是开源的,几乎所有我们能想到的OS都支持它,并且具有对C ++,C#,Java,Ruby,Python和PHP的语言支持。最后,它非常容易驱动(语言映射是为适应每种语言而定制的)。它也快速高效。甚至还有适用于设备的简化版本。
回答
我们可能想尝试使用YAMI,它非常简单但功能强大,可移植,并且绑定了几种语言
回答
为什么不使用D-Bus?这是一个非常简单的消息传递系统,几乎可以在所有平台上运行,并且旨在提高健壮性。目前几乎所有的脚本语言都支持它。
http://freedesktop.org/wiki/Software/dbus
回答
Python有一个相当不错的IPC库:请参阅https://docs.python.org/2/library/ipc.html
回答
分布式计算通常很复杂,因此建议我们使用现有的库或者框架,而不要浪费时间。先前的发布者已经列举了其中的一些库和框架。根据需求,我们可以选择非常低级的框架(例如套接字)或者高级框架(例如CORBA)。不能有一个通用的"使用此"答案。我们需要对分布式编程进行自我教育,然后发现为工作选择合适的库或者框架要容易得多。
有一个用于ACE的广泛使用的C ++框架,称为ACE和基于ACE的CORBA ORB TAO。有关于ACE的非常好的书籍http://www.cs.wustl.edu/~schmidt/ACE/,所以我们可以看一下。小心!
回答
YAMI的另一个消息传递基础结构是一个轻量级的消息传递和网络框架。