[面试]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服务做解析 生成远程对象。
(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服务做解析 生成远程对象。
相关文章推荐
- 面试笔记2
- JAVA面试笔记(3)
- 面试笔记之深圳IT公司
- 面试笔记11(操作系统基础)(需完善)
- RMI笔记
- 同学面试笔记
- Java面试刷题错误笔记:(三):操作系统篇
- 【C++研发面试笔记】2. 多态性
- C/C++求职宝典21个重点笔记(常考笔试面试点)
- 【C++研发面试笔记】12. 基本数据结构-B树簇
- JS基础笔记(面试笔试有用)
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- 面试笔记1
- 【安卓面试笔记】(二)Activity 的四种加载模式
- 面试问题总结(学习笔记)
- C++面试笔记(三)
- RMI笔记--基于客户/服务器结构
- vue 面试笔记
- 001java面试笔记——【java基础篇】面试总结的java面试题