关于远程方法调用(RMI)的实现

介绍Java远程方法调用(RMI)的工作原理和技术实现细节,包括如何创建远程接口、实现远程对象及编写客户端程序等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 远程方法调用 

远程方法调用(Remote Method Invocation ,RMI)使用户能访问在另一 
主机上的Java对象,并远程调用其方法。程序的对象是客户,而远程对象是服 
务器。远程对象也可以是另一个远程服务对象的客户。通过使用持续性(串行 
化和解串行化),本地对象和原始类型值可以作为参数传递给远程对象。这种 
方式允许Java程序可以利用分布式计算将工作量分散到多个Java虚拟机上。 

工作原理 
RMI系统结构,在客户端和服务器端都有几层结构。 
--------- ---------- 
| 客户 | | 服务器| 
---------- ---------- 
| | 
------------- ---------- 
| 占位程序 | | 骨干网 | 
-------------- ----------- 
| | 
------------------------------------ 
| 远 程 引 用 层 | 
------------------------------------ 
| | 
------------------------------------ 
| 传 输 层 | 
------------------------------------ 

方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference 
Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 
输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。 
占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。 
远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个 
服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的 
远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返 
回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上 
经传输层和远程调用层返回。最后,占位程序获得返回值。 

要完成以上步骤需要有以下几个步骤: 
1、生成一个远程接口 
2、实现远程对象(服务器端程序) 
3、生成占位程序和骨干网(服务器端程序) 
4、编写服务器程序 
5、编写客户程序 
6、注册远程对象 
7、启动远程对象 

具体实现如下: 
1、生成一个远程接口 
package c15.ptime; 
import java.rmi.*; 

public interface PerfectTimeI extends Remote { 
long getPerfectTime() throws RemoteException; 

2、实现远程对象(服务器端程序) 
package c15.ptime; 
import java.rmi.*; 
import java.rmi.server.*; 
import java.rmi.registry.*; 
import java.net.*; 

public class PerfectTime 
extends UnicastRemoteObject 
implements PerfectTimeI { 
public long getPerfectTime() 
throws RemoteException { 
return System.currentTimeMillis(); 

public PerfectTime() throws RemoteException { 
super(); 

public static void main(String[] args) { 
System.setSecurityManager( 
new RMISecurityManager()); 
try { 
PerfectTime pt = new PerfectTime(); 
Naming.rebind( 
"//zhouty:2005/PerfectTime" , pt); 
System.out.println("Ready to do time"); 
} catch(Exception e) { 
e.printStackTrace(); 


4、编译远程对象(服务器端程序) 
javac -classpath . -d . PerfectTime.java 

5、生成根和干(占位程序和骨干程序) 
rmic -classpath . -d . c15.ptime.PerfectTime 

6、注册远程对象 
start rmiregistry 2005 

7、启动服务器端程序 
java -Djava.rmi.server.codebase=file:///d:/TestRMI/ c15.ptime.Per 
fectTime 

8、编写客户端程序 
package c15.ptime; 
import java.rmi.*; 
import java.rmi.registry.*; 

public class DisplayPerfectTime { 
public static void main(String[] args) { 
System.setSecurityManager( 
new RMISecurityManager()); 
try { 
PerfectTimeI t = 
(PerfectTimeI)Naming.lookup( 
"192.168.0.171:2005/PerfectTime"); 
for(int i = 0 ; i < 10; i++) 
System.out.println("Perfect time =" + 
t.getPerfectTime()); 
} catch(Exception e) { 
e.printStackTrace(); 


9、编译客端程序 
javac -classpath . -d . DisplayPerfectTime.java 

10、修改JVM的配置文件 (客户机和服务器的都需要经过修改) 
%JRE_HOME%/policytool.exe 

11、启动客户程序 
java -classpath . c15.ptime.DisplayPerfectTime 

12、返回结果 

Perfect time =967274884390 
Perfect time =967274884450 
Perfect time =967274884450 
Perfect time =967274884450 
Perfect time =967274884500 
Perfect time =967274884500 
Perfect time =967274884560 
Perfect time =967274884610 
Perfect time =967274884610 
Perfect time =967274884610 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值