语言/操作系统之间的进程间通信

Posted

技术标签:

【中文标题】语言/操作系统之间的进程间通信【英文标题】:Inter-process communication between languages/operating systems 【发布时间】:2009-04-21 15:14:17 【问题描述】:

我正在寻找一种可以在相同或不同系统上运行的语言和/或环境之间使用的进程间通信工具。例如,它应该允许在 Java、C# 和/或 C++ 组件之间发送信号,并且它还应该支持某种排队机制。唯一明显与环境和语言无关的工具是文件,但我认为这太慢了——而且有纪律的排队可能难以实现。文献中描述的许多其他工具仅适用于一种语言或一种操作系统。建议将不胜感激!

【问题讨论】:

【参考方案1】:

您可能需要查看ActiveMQ 之类的内容。在 EAI 模式中,JMS 总线被大量用于集成用几种不同语言编写并在多个系统上运行的多个模块。对我来说,像 ActiveMQ 这样的企业消息总线适合您的需要。如果您正在寻找其他东西,请告诉我。

-沙米克

【讨论】:

【参考方案2】:

在谈论异构架构时,恕我直言,传输层(正如您将“套接字”标记为答案)与协议层(数据序列化等)一样重要。

我发现及时返回的是学习编程库,它统一了不同编程语言、操作系统和架构(大端/低端、16/32/64 位等)之间的数据序列化.

我最喜欢的选择是 Google Protocol Buffers,内置支持 C++、Python、java 和 Third-Party Add-ons,支持 huge amount of programming/scripting languages(包括 Lua、Matlab、Ruby、Perl、R、php、OCaml、Mercury、 Erlang、Go、D、Lisp)和RPC implementations(如Zeroc ICE)。许多其他产品都支持它们,例如SWI-Prolog Google Protocol Buffers Library。

替代方案是Thrift,它也支持多种编程语言。

为了比较,您可以查看:Thrift vs Protobuf vs JSON。

【讨论】:

【参考方案3】:

嗯,你绝对可以考虑使用“套接字”。

【讨论】:

【参考方案4】:

我个人会使用XML-RPC。它易于在多个平台上使用,并且完全满足您的所有要求,任何排队都可以通过编程方式处理。

【讨论】:

【参考方案5】:

查看Microsoft Message Queue 或类似内容。也可以看看XML-RPC、SOAP、JSON 等。

【讨论】:

【参考方案6】:

我的赌注是 DBus [点对点] - 它有更好的流量控制。它运行在 RPC 之上,因此有许多语言绑定。 RPC 当然是建立在本地套接字之上的。

【讨论】:

很高兴在 5 年后看到另一个答案!当我第一次问这个问题时,DBus 可能并不存在!谢谢 你最后用了什么? 当时使用的套接字用于相当具体的工作。恐怕从那以后我就再也没有使用过它了,因为不再需要它了。如果是这样,我会记住 DBus!干杯。

以上是关于语言/操作系统之间的进程间通信的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统编程--进程间通信 ---管道篇

进程间通信 详解

进程间通信

进程间通信的信号

进程间通信

进程间的五种通信方式介绍