您的位置:首页 > 职场人生

[面试]RMI笔记

2014-03-10 16:13 218 查看
JAVA RMI是JAVA分布式结构的基础。 远程对象的通信过程中, RMI 使用标准机制: stub 和skeleton 。远程对象的 stub 担当远程对象的客户本地代表或代理人角色,调用程序将调 用本地stub 的方法,而本地 stub 将负责执行对远程对象的方法调用。在 RMI 中,远程对象的 stub 与该远程对象所实现的远程接口集相同。调用 stub 的方法时将执行下列操作:

(1) 初始化与包含远程对象的远程虚拟机的连接;

  (2) 对远程虚拟机的参数进行编组-传输参数;

  (3) 等待远程方法调用结果;

  (4) 解编(读取)返回值或返回的异常;

  (5) 将值返回给调用程序。
为了向调用程序展示比较简单的调用机制, stub 将参数的序列化和网络级通信等细节隐藏了起来。在远程虚拟机中,每个远程对象都可以有相应的 skeleton。s keleton 负责将调用分配给实际的远程对象实现。它在接收方法调用时 执行下列操作:
(1) 解编(读取)远程方法的参数;
(2) 调用实际远程对象实现上的方法;
(3) 将结果(返回值或异常)编组(写入并传输)给调用程序。
stub 和 skeleton 由 rmic 编译器生成。在最新的JDK中,不需要手工生产stub和skeleton,用动态代理生成的Proxy代替了stub,而skeleton则取消了。
我们可以查看源代码来了解RMI的内部实现。Server端调用UnicastRemoteObject的export方法输出远程对象,export方法会在一个线程里监听某个TCP端口上的方法调用请求。

RMI的编程模型是采用框架和桩的模式,基本原理如下:

客户请求------>(rmi协议)---------->远程框架(注册机)------------>远程对象----------(处理)--------->结果返回到框架--------->客户

1. 服务器端创建远程接口和实现远程接口的类

2. 通过RMIC命令(%java_home%/bin/rmic.exe)来编译远程接口实现类从而生成 stub等文件.

3. 运行 rmiregistry命令(%java_home%/bin/rmiregistry.exe) 来启动RMI远程注册机

4. 向RMI注册机注册远程对象供客户端调用

socket的效率要高于rmi,socket是通过套接流的直接读写方式,只经过传输层。

rmi经过传输层 〉〉应用层有专门rmi服务做解析 生成远程对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: