RMI远程方法调用

来源:互联网 发布:淘宝买家封号怎么解封 编辑:程序博客网 时间:2024/05/22 02:17

RMI的编程思想    

 对于客户机端,需要一些特定的代码来引用远程对象。而对于服务器端,必须定义类并实例化类的远程对象,服务器端的代码必须能够登记这些对象,并将他们的方法向客户机导出。 而客户端与服务器端都要实现一个接口,这个接口定义了可以远程调用的方法。最后一点是,客户机可能将对象当做参数来传递,而远程对象上的方法可以返回一个对象。这点是靠Java对象序列化来实现的。 

RMI框架

RMI框架封装了所有底层通信细节,并且解决了编组、分布式垃圾收集、安全检查和并发性等通用问题。有了现成的框架,开发人员就只需专注于开发与特定问题领域相关的各种本地对象和远程对象。


RMI采用客户/服务器通信方式

RMI采用客户/服务器通信方式。在服务器上部署了提供各种服务的远程对象,客户端请求访问服务器上远程对象的方法。
如图所示,HelloServiceImpl是一个远程对象,它运行在服务器上,客户端请求调用HelloServiceImpl对象的echo()方法


 RMI框架采用代理来负责客户与远程对象之间通过Socket进行通信的细节。RMI框架为远程对象分别生成了客户端代理和服务器端代理。位于客户端的代理类称为存根(Stub),位于服务器端的代理类称为骨架(Skeleton)。


存根采用一种与平台无关的编码方式,把方法的参数编码为字节序列,这个编码过程称为参数编组。
RMI主要采用Java序列化机制进行参数编组。接着,存根把以下请求信息发送给服务器:
被访问的远程对象的名字。
被调用的方法的描述。
编组后的参数的字节序列。

服务器端接收到客户端的请求信息,然后由相应的骨架对象来处理这一请求信息,骨架对象执行以下操作:
反编组参数,即把参数的字节序列反编码为参数。
定位要访问的远程对象。
调用远程对象的相应方法。
获取方法调用产生的返回值或者异常,然后对它进行编组。
把编组后的返回值或者异常发送给客户。

大致说来,创建一个RMI应用包括以下步骤:


(1)创建远程接口:继承java.rmi.Remote接口。
(2)创建远程类:实现远程接口。
(3)创建服务器程序:负责在rmiregistry注册表中注册远程对象。

(4)创建客户程序:负责定位远程对象,并且调用远程对象的方法。

创建的RMI应用的类框图。

其中HelloService是一个远程接口,它继承了java.rmi.Remote接口,HelloServiceImpl类实现了该接口,
并且继承了java.rmi.server.UnicastRemoteObject类
SimpleClient和SimpleServer类分别是客户程序和服务器程序。

原创粉丝点击