远程过程调用

Posted

技术标签:

【中文标题】远程过程调用【英文标题】:Remote Procedure Calls 【发布时间】:2011-06-14 21:56:25 【问题描述】:

我正在上一门软件工程课程,其中不同的团队正在构建一个大系统的不同原型子系统(F35 Lightning 飞机的不同子系统!)。

问题在于团队可以使用不同的编程语言(如 C++ 和 Java),这取决于他们最擅长什么。然而,这些子系统需要相互通信(如雷达需要为导航和提供对象坐标)控制)。因此,我们需要提出一个解决方案,让不同的模块可以实时交互。

有人建议使用 XML-RPC,因此我正在阅读它。阅读后我认为它用于服务器客户端架构。这是进行进程间通信的好方法吗?我有哪些选择?

任何帮助将不胜感激。

问候, 新手

【问题讨论】:

您是否被告知使用,或者这只是一种选择?为了简单的消息传递,我建议不要使用它。 这只是一个选项。我正在寻找一种简单的实现,它可以让我在用不同语言编码并且彼此独立的不同子系统之间进行通信...... 阅读 TCP 的基础知识 - 这将很有价值!而且您需要同时选择传输和消息格式;这些通常是独立的。 【参考方案1】:

除了 XML-RPC 之外还有几个选项。对于简短的项目符号比较,请查看:

http://michaeldehaan.net/2008/07/17/xmlrpc-vs-rest-vs-soap-vs-all-your-rpc-options/

如果您的交易所更注重数据,Protocol Buffers 可能是一个替代方案。

协议缓冲区是一种以高效且可扩展的格式对结构化数据进行编码的方法。

就个人而言,我会首先选择轻量级交换格式或方法,因为组件被视为原型。像 REST 或一些自定义消息传递之类的东西可能很简单,但也足够了。

【讨论】:

感谢您的回答。我检查了协议缓冲区,它看起来像我需要的。您发送链接的页面上只有一个问题。 person 结构可以在 C++ 代码中实例化,然后 Java 代码可以使用其中的值吗? 我不太确定您的问题,但我认为这是这种方法的要点之一。 @Newbie:protobuf 可以被认为是一种多语言绑定数据序列化机制,即(i)您创建一个规范。 (原始文件)您的数据结构 (ii) 使用它以您选择的语言(可能是 C++、Java、what-have-you)生成代码。 (iii) 在您的项目中使用生成的代码进行序列化/反序列化。数据传输独立于这种机制,即您的数据如何从 Java 程序传输/移动到 C++ 程序仍然必须独立构建(可能是套接字、管道、DBUS 等)。 [contd.] OTOH,从我读过/听到的 Thrift(thrift.apache.org) 来看,除了提供序列化机制外,还为存根服务器/客户端等提供 RPC 机制。我想是另一个需要考虑的选择。 如果你喜欢Protocol Buffers,你可能也会喜欢Facebook的Thrift——我觉得它很可爱而且直截了当!【参考方案2】:

如果您已经熟悉 XML,这可能是一个合理的答案。 XML 的一个优点是您不必担心不同的机器如何表示数字。缺点是不断将数字转换为文本并转换回数字需要时间。

【讨论】:

以上是关于远程过程调用的主要内容,如果未能解决你的问题,请参考以下文章

Feign远程调用

从 0 到 1:全面理解 RPC 远程调用

远程过程调用与本地过程调用

Feign远程调用原理

PRC远程过程调用

如何处理数据库远程调用失败问题