在RMI中传递远程参数

时间:2013-07-08 16:28:47

标签: parameter-passing rmi distributed-computing stub

我想确认一下RMI理论。

让我们假设客户端A请求将对象O远程引用到服务器B.

好吧,现在如果In O接口(Interf)有一个像这样的方法: void foo(Interf obj);

当客户端A调用O.foo(O)时,它传递存根引用(在收到之前),然后服务器不使用其本地引用,而是使用Stub对象(由客户端接收),因此每次对O方法的调用都将由Server进行利用其TCP / IP服务。

可以吗?

如果您认为这些可以提高我对RMI的理解,您可以随意添加一些细节。

此致

1 个答案:

答案 0 :(得分:2)

CORBA服务器(用于实现RMI / IIOP,而不是RMI / JRMP)通常实现“共置存根”优化。也就是说,如果服务器在存根上为驻留在同一进程中的对象调用方法,则CORBA服务器通常会避免TCP / IP和线程池调度开销。而是复制参数,将在目标对象上调用该方法,并复制并返回结果对象。

作为参考,Java服务器通常实现此优化。生成的存根类使用Util.isLocal方法来确定存根目标是否是本地的。接下来,调用Stub。_servant_preinvoke以获取本地服务方的引用/代理,Util.copyObjects(或Util.copyObject)用于复制参数和返回对象。 (异常处理,RemarshalException等还有其他复杂性,但我已经概述了基本流程。)