Java RMI
这几天在看《Core Java》,研究了下RMI技术,现在用一个小例子演示下RMI
为了能充分说明RMI远程方法调用的特性,现在本机上装了一个虚拟机来模拟现实中的分布式应用。
本机IP192.168.27.1
虚拟机IP192.168.27.128
主机作为服务器向客户端提供远程服务,虚拟机作为客户端,调用服务器(主机)提供的远程服务。
在主机Elipse下建立工程RMIDemoServer,目录结构如下:
并建立下面3个Java文件
Hello.java
HelloImpl.java
HelloServer.java
其中
rmi.server.Hello为描述远程服务的接口,提供sayHello方法,依RMI规范,该接口必须继承至Remote接口,且所有方法均要抛出RemoteException
rmi.server.HelloImpl为rmi.server.Hello接口的实现类,实现了sayHello()方法,返回一个简单的字符串信息
rmi.server.HelloServer为服务器的主类,在1099端口上监听客户端请求,并在命名服务上下文中绑定hello,供客户端调用
在虚拟机Eclipse中,建立工程RMIDemoClient,目录结构如下:
并编写客户端访问程序如下:
HelloClient.java
注意:需将RMIDemoServer项目中的Hello.class打包成jar包,添加到RMIDemoClient的Classpath中(或者直接拷贝Hello.java至RMIDemoClient项目中),否则HelloClient的代码编译不能通过。
运行RMIDemoServer项目中的HelloServer,并在服务器控制台看到下面信息:
[Server] - server start...
[Server] - waiting for client...
运行RMIDemoClient中的HelloClient,并在客户端控制台看到下面信息:
[Client] - sayHello()
[Client] - Hi,zhangsan!
且能看到服务器控制台也有相应的信息打印出来:
[Server] - request from client,name=zhangsan
可见客户端调用服务器方法成功!
整个RMI程序运行的流程图如下: