简单介绍 RMI

作者:未知 / 来源:网络 / 整理:脚本之家如果知识不能与人分享,这不算是真正的知识了。
这里是修真院后端小课堂,每篇分享文从【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】八个方面深度解析后端知识/技能,本篇分享的是:【简单介绍 RMI】 大家好,我是 IT 修真院武汉分院第十三期的学员白晨松,一枚正直纯洁善良的 java 程序员今天给大家分享一下...

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

【简单介绍 RMI】

 

大家好,我是 IT 修真院武汉分院第十三期的学员白晨松,一枚正直纯洁善良的 java 程序员

今天给大家分享一下,修真院官网 JAVA 任务八,深度思考中的知识点——简单介绍 RMI

1. 背景介绍

RMI 全称是 Remote Method Invocation-远程方法调用,Java RMI 在 JDK1.1 中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯 Java 的网络分布式应用系统的核心解决方案之一。其实它可以被看作是 RPC 的 Java 版本。但是传统 RPC 并不能很好地应用于分布式对象系统。而 Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。

RMI 目前使用 Java 远程消息交换协议 JRMP(Java Remote Messaging Protocol)进行通信。由于 JRMP 是专为 Java 对象制定的,Java RMI 具有 Java 的 "Write Once,Run Anywhere" 的优点,是分布式应用系统的百分之百纯 Java 解决方案。用 Java RMI 开发的应用系统可以部署在任何支持 JRE 的平台上。但由于 JRMP 是专为 Java 对象制定的,因此,RMI 对于用非 Java 语言开发的应用系统的支持不足。不能与用非 Java 语言书写的对象进行通信。

2. 知识剖析

RMI 的组成

一个正常工作的 RMI 系统由下面几个部分组成:

1. 远程服务的接口定义
2. 远程服务接口的具体实现 
3. 桩(Stub)和框架(Skeleton)文件
4. 一个运行远程服务的服务器 
5. 一个 RMI 命名服务,它允许客户端去发现这个远程服务
6. 类文件的提供者(一个 HTTP 或者 FTP 服务器)
7. 一个需要这个远程服务的客户端程序 

调用远程 RMI 的步骤:

1,客户调用客户端辅助对象 stub 上的方法 

2,客户端辅助对象 stub 打包调用信息(变量,方法名),通过网络发送给服务端辅助对象 skeleton

3,服务端辅助对象 skeleton 将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象

4,调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象 skeleton 

5,服务端辅助对象将结果打包,发送给客户端辅助对象 stub

6,客户端辅助对象将返回值解包,返回给调用者

7,客户获得返回值

3. 常见的问题

1.RMI 远程方法调用的优点。

4. 解决方案

RMI 的主要优点:

面向对象:RMI 可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,您可以将类似 Java 哈希表这样的复杂类型作为一个参数进行传递。

可移动属性: RMI 可将属性 (类实现程序) 从客户机移动到服务器,或者从服务器移到客户机。这样就能具备最大的灵活性,因为政策改变时只需要您编写一个新的 Java 类,并将其在服务器主机上安装一次即可。

安 全:RMI 使用 Java 内置的安全机制保证下载执行程序时用户系统的安全。

便于编写和使用:编写 RMI 实际上就是 编写 java 接口

可连接现有 / 原有的系统:  RMI 可利用标准 Java 本机方法接口 JNI 与现有的和原有的系统相连接

编写一次,到处运行

分布式垃圾收集: RMI 采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象。并行计算:RMI 采用多线程处理方法,可使您的服务器利用这些 Java 线程更好地并行处理客户端的请求。

5. 编码实战

6. 扩展思考

RMI 有什么劣势

        RMI 的局限性之一是 RMI 是 Java 语言的远程调用,两端的程序语言必须是 Java 实现,对于不同语言间的通讯可以考虑用 Web Service 或者公用对象请求代理体系(CORBA)来实现。

        对服务器的 IP 地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器 IP 和端口如何,但是客户端程序依赖这个 IP 和端口。这也是 RMI 的局限性之一。这个问题有两种解决途径:一是通过 DNS 来解决,二是通过封装将 IP 暴露到程序代码之外。

7. 参考文献

RMI 的基本使用知识

http://www.blogjava.net/zhenyu33154/articles/320245.html

RMI 优劣势总结

https://blog.csdn.net/mingtianhaiyouwo/article/details/50513577           

讨论问题:

问:

 1.Spring RMI 会占用两个端口?

 2.registryPort 和 servicePort?

 3.RMI 服务器重启,总是会出现客户端连接拒绝的问题。

答:

1.Spring RMI 有两个端口,一个是注册端口(默认为 1099),还有一个是数据传输端口,如果不指定,数据传输端口是随机分配的。

    

2. 注册端口:registryPort   注册端口是 RMI 注册远程服务的端口。

    服务端口:servicePort    RMI 的通讯需要的传送数据的端口。如果没有设置 servicePort, 则使用随机端口。

3. 服务器重启会影响到客户端, 说明客户端有保存着重启之前的服务器连接相关记录。有可能是客户端有缓存,所以只要刷新缓存即可解决问题。

感谢观看, 如有出错, 恳请指正

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

 

 

PPT链接 视频链接

 

 

更多内容,可以加入IT交流群565734203与大家一起讨论交流

 

这里是技能树·IT修真院:https://www.jnshu.com,初学者转行到互联网

你可能在找的问题:

java教程

简单认识SLF4J

SLF4J JAVA简易日志门面【SimpleLoggingFacadeforJava,缩写SLF4J】 宏观定义:一套包装Logging框架的界面程式,以外观模式实现

java教程

Semaphore源码分析-java8

1.特性分析 Semaphore就是一个计数的信号量 每一个线程在获取资源前,必须从semaphore获取许可,这保证了一定有可用的资源。

java教程

java中的12个原子操作类

1.简介 JDK1.5开始提供了java.util.concurrent.atomic包,这个包中的原子类提供了一种用法简单、性能高效、线程安全的更新变量的方式。

java教程

JDK中涉及的设计模式总结

所有的设计模式都找了一种JDK中的实现(并未列出所有,原因是太多,而且本次整理的目的是通过JDK中的实例完成设计模式的梳理和记忆,所以只写一种实现)。依次对类,对应的方法,功能进行介绍。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

标题
返回顶部