在RMI远程传递参数(Passing remote parameters in RMI)

2019-10-18 08:56发布

我想有关于RMI理论确认。

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

那么,现在如果在O接口(INTERF)有等的方法:无效美孚(INTERF OBJ);

当客户A调用O.foo(O)它通过存根引用(接收之前),然后服务器不使用其本地参考,但存根对象(由客户端接收的),因此通过服务器上的O方法每次通话将利用它的TCP / IP服务。

可以吗?

你应该感到自由,如果你认为那些能提高我的理解RMI添加一些细节。

问候

Answer 1:

CORBA服务器(如用于实施RMI / IIOP,不RMI / JRMP)典型地实施“共置存根”优化。 也就是说,如果一个服务器调用关于驻留在相同的处理的对象的存根方法,该CORBA服务器将典型地避免TCP / IP和线程池调度开销。 相反,参数被复制,该方法将在目标对象上被调用,并且将结果对象被复制并返回。

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



文章来源: Passing remote parameters in RMI