我正在寻找一种非常简单的方法来允许 Java 和 C++ 应用程序之间的 RPC。
我的系统包含几个 Java 模块和一个 C++ 模块。我没有太多不同的程序要调用(每个模块大约 2-3 个),它们不会有太大变化(除了一些小的调整,如添加新程序或更改原型)。我正在编写所有模块,所以我可以使用我想要的任何东西。此外,除了一个之外,所有模块都将在同一台机器上执行,但是在另一台机器上执行其中一些模块而不会造成太多麻烦(基本上,只需更改配置文件)的可能性将是一个加分项。
用于此应用程序的所有模块、机器和网络都是可信的,但我不希望 RPC 协议有任何安全漏洞,我希望性能开销最小,因此 RPC 协议越简单越好。此外,每个调用的方法只有一个原型。
目前我正在尝试通过 TCP 套接字使用 RPC,因为我不想使用 RMI 或 Unix 原语(Java 上没有标准实现,也没有网络功能)。我编写了一个非常简单的 RPC 协议:通过一个 TCP 帧,你给出被调用方法的序列化名称,然后是序列化的参数列表。在服务器端,它监听一个对象并使用反射来执行给定的方法。如果出现错误,返回的对象是一个封装错误的 DistantRPCError。
代码非常简单(只有大约 100 loc)并且可以在多种情况下使用(我使用 Streams,所以我什至不依赖于 Sockets)。我面临的问题是我无法静态测试我的代码(本地测试的简单初始化比测试的代码长)而且我真的看不出在 C++ 中实现它有多难(使用 JNI 进行序列化, 我想)。
所以我的问题是:你知道在 Java 和 C++ 中进行 RPC 调用的另一种方式吗,它非常简单(所以没有 RMI)并且可以信任(我不是在寻找一种闪亮的技术,我想要一些东西标准和行业证明)。另外,我对性能有一些限制(机器是一台低成本的计算机,我在本地有很多密码学要做)。正如我所说,大多数模块(除了一两个)都是在本地执行的,所以我也对 IPC 机制感兴趣(即使我的所有模块都只有一种 RPC 机制会很好)。
如果你愿意,我可以给你我的实际 RPC 代码,但正如我所说,它甚至没有经过测试,所以我不确定它是否有效。
编辑:我可能会使用 SOAP,因为我对使用 ORB 解决我的特定问题没有太大兴趣。谢谢你的主意!
我不知道是否有任何一个能满足您对简单性的标准,但我想说您的两个最佳选择是旧的 - CORBA - 和新的 - Web 服务。
之所以想到 CORBA,是因为用不同语言编写的分布式组件的互操作是其灵感的一部分,但这并不简单。市场也投票反对 CORBA。我想说它在 90 年代初到中期达到顶峰,此后一直在下降。我对 CORBA 的了解不多,因为它的价值。
Web 服务,尤其是当您避开 SOAP 并使用 REST 时,通过 HTTP 工作并且相对简单。我认为开发和维护自己的有线协议没有任何优势。我会使用 HTTP 并坚持使用 REST。
| 归档时间: |
|
| 查看次数: |
5463 次 |
| 最近记录: |