gpt4 book ai didi

java - Java 和 C++ 中最简单的 RPC

转载 作者:太空狗 更新时间:2023-10-29 20:30:59 26 4
gpt4 key购买 nike

我正在寻找一种允许在 Java 和 C++ 应用程序之间进行 RPC 的非常简单的方法。

我的系统包含几个 Java 模块和一个 C++ 模块。我没有太多不同的过程可以调用(每个模块大约 2-3 个),并且它们不会有太大变化(除了一些小的调整,例如添加新过程或更改原型(prototype))。我正在编写所有模块,以便我可以使用任何我想要的东西。此外,除了一台机器之外,所有模块都将在同一台机器上执行,但如果能够在另一台机器上执行其中一些模块而不会造成太多麻烦(基本上,只需更改配置文件),那将是一个加号。

用于此应用程序的所有模块、机器和网络都是可信的,但我不希望 RPC 协议(protocol)有任何安全缺陷,我希望性能开销最小,因此 RPC 协议(protocol)越简单越好。此外,每个调用的方法只有一个原型(prototype)。

目前我正在尝试通过 TCP 套接字使用 RPC,因为我不想使用 RMI 或 Unix 原语(Java 上没有标准实现,也没有网络功能)。我写了一个非常简单的 RPC 协议(protocol):通过一个 TCP 帧,你给出被调用方法的序列化名称,然后是序列化的参数列表。在服务器端,它监听一个对象并使用反射来执行给定的方法。如果出现错误,返回的对象是封装了错误的 DistantRPCError。

代码非常简单(只有大约 100 个位置)并且可以在多种情况下使用(我使用 Streams,所以我什至不依赖于套接字)。我面临的问题是我无法静态测试我的代码(本地测试的简单初始化比测试代码长)而且我真的看不出用 C++ 实现它有多难(使用 JNI 进行序列化) ,我想)。

所以我的问题是:您是否知道在 Java 和 C++ 中进行 RPC 调用的不同方法,这种方法非常简单(因此没有 RMI)并且可以信任(我不是在寻找 Shiny 的技术,我想要一些标准的和经过行业验证的东西)。此外,我对性能有一些限制(该机器是一台低成本计算机,我在本地有很多密码学要做)。正如我所说,大部分模块(除了一两个)都是在本地执行的,所以我也对 IPC 机制感兴趣(即使我的所有模块只有一个 RPC 机制会很好)。

如果你愿意,我可以给你我的实际 RPC 代码,但正如我所说,它甚至没有经过测试,所以我完全不确定它是否有效。

编辑:我可能会使用 SOAP,因为我对使用 ORB 来解决我的特定问题没有太大兴趣。谢谢你的想法!

最佳答案

我不知道其中任何一个是否符合您的简单性标准,但我想说您的两个最佳选择是旧的 - CORBA - 和新的 - 网络服务。

想到 CORBA 是因为用不同语言编写的分布式组件的互操作是其灵感的一部分,但这并不简单。市场也对 CORBA 投了反对票。我会说它在 90 年代初到中期达到顶峰,此后一直在下降。我很少听说 CORBA,因为它的值(value)。

Web 服务,尤其是如果您避开 SOAP 而使用 REST,则通过 HTTP 工作并且相对简单。我看不出开发和维护自己的有线协议(protocol)有任何优势。我会使用 HTTP 并坚持使用 REST。

关于java - Java 和 C++ 中最简单的 RPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com