首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java和C++中最简单的远程过程调用

Java和C++中最简单的远程过程调用
EN

Stack Overflow用户
提问于 2011-03-14 18:09:24
回答 2查看 5.5K关注 0票数 4

我正在寻找一种非常简单的方法来允许Java和C++应用程序之间的远程过程调用。

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

这个应用程序使用的所有模块、机器和网络都是可信的,但我不希望RPC协议有任何安全缺陷,我想要最小的性能开销,所以RPC协议越简单越好。而且,每个被调用的方法只有一个原型。

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

代码非常简单(大约只有100loc),可以在很多情况下使用(我使用的是流,所以我甚至不依赖Sockets)。我面临的问题是,我不能静态地测试我的代码(本地测试的简单初始化比被测试的代码要长),并且我不能真正看出在C++中实现它有多难(我想是使用JNI进行序列化)。

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

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

编辑:我可能会使用SOAP,因为我看不出有多少兴趣使用ORB来解决我的特定问题。谢谢你的点子!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-14 18:17:17

我不知道其中任何一个是否能满足您的简单性标准,但我想说您最好的两个选择是旧的CORBA和新的web服务。

CORBA之所以出现,是因为用不同语言编写的分布式组件的互操作是其灵感的一部分,但它并不简单。市场也投票反对CORBA。我想说的是,它在90年代初到中期达到了顶峰,此后一直在下降。我不太了解CORBA,因为它是有价值的。

Web服务,尤其是当您避免使用SOAP而使用REST时,工作在HTTP上,并且相对简单。我看不出开发和维护自己的有线协议有什么好处。我会使用HTTP,并坚持使用REST。

票数 5
EN

Stack Overflow用户

发布于 2011-03-24 18:24:18

就像你知道的那样,我最终选择了在我所有的RPC上使用MessagePack,重点是:它使用起来非常简单,开源(只有一个很小的代码库),而且它工作得很好。

缺点是: java lib完全没有注释,但正如我所说的,它是开源的,具有很小的代码库和简单的体系结构,因此理解它的工作原理是没有问题的。

还有很多不同的java库的开发版本(这可能意味着API不稳定,但是一旦系统完成我就不会更新库,所以这不是问题),我不能在windows上编译C++库(这对我来说不是问题,因为我在Linux上使用它)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5297185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档