Java远程方法调用(RMI)全解析
1. 网络应用基础与RMI简介
在网络发展历程中,网络主要涉及两大基本应用。其一为在主机间进行文件与数据的传输,像FTP、SMTP、HTTP、NFS、IMAP、POP等众多协议都服务于这一应用。其二则是让一台主机能够在另一台主机上运行程序,Telnet、rlogin、远程过程调用(RPC)以及大量数据库中间件都属于这一范畴。而远程方法调用(RMI)就属于第二种网络应用,它允许本地机器在远程主机上运行程序。
RMI作为Java的核心API和类库,能让运行在一个Java虚拟机中的Java程序调用运行在不同虚拟机中的对象方法,即便这两个虚拟机运行在物理上分离的主机上。从本质上讲,一个Java程序的部分代码在本地计算机运行,而另一部分则在远程主机运行。RMI营造出一种假象,让分布式程序看似在一个拥有统一内存空间的系统中运行,该内存空间存储着实际物理连接两端所用的所有代码和数据。
2. 什么是远程方法调用(RMI)
RMI使得不同主机上的Java对象能像在同一虚拟机中运行的对象那样相互通信,即通过调用对象的方法来实现。远程对象存于服务器端,每个远程对象都会实现一个远程接口,该接口明确了客户端可以调用的方法。客户端调用远程对象的方法与调用本地方法几乎别无二致。
例如,本地客户端上运行的对象可以将数据库查询语句作为字符串参数传递给远程服务器上数据库对象的某个方法,请求其对一系列记录进行求和操作,服务器会将结果以双精度浮点数的形式返回给客户端,这种方式比下载所有记录并在本地求和更为高效。Java兼容的Web服务器可以实现远程方法,让客户端能够请求获取网站上公共文件的完整索引,这能显著减少服务器响应像Google这类