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语言书写的对象进行通信。
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,客户获得返回值
RMI的主要优点:
面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,您可以将类似Java哈希表这样的复杂类型作为一个参数进行传递。
可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。这样就能具备最大的灵活性,因为政策改变时只需要您编写一个新的Java类,并将其在服务器主机上安装一次即可。
安 全:RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。
便于编写和使用:编写RMI实际上就是 编写java接口
可连接现有/原有的系统: RMI可利用标准Java本机方法接口JNI与现有的和原有的系统相连接
编写一次,到处运行
分布式垃圾收集: RMI采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象。
并行计算:RMI采用多线程处理方法,可使您的服务器利用这些Java线程更好地并行处理客户端的请求。
RMI有什么劣势
RMI的局限性之一是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现。
对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。
RMI的基本使用知识
http://www.blogjava.net/zhenyu33154/articles/320245.html
RMI 优劣势总结
https://blog.csdn.net/mingtianhaiyouwo/article/details/50513577