简单介绍 RMI
这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【简单介绍?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修真院:,初学者转行到互联网 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |