发表于: 2017-11-19 23:38:56

1 674


今天完成的事情:

RMI:远程方法调用(Remote Method Invocation)。能够让在某个java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法。

RMI远程调用步骤:

1,客户对象调用客户端辅助对象上的方法

2,客户端辅助对象打包调用信息(变量,方法名),通过网络发送给服务端辅助对象

3,服务端辅助对象将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象

4,调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象

5,服务端辅助对象将结果打包,发送给客户端辅助对象

6,客户端辅助对象将返回值解包,返回给客户对象

7,客户对象获得返回值

对于客户对象来说,步骤2-6是完全透明的

 

搭建一个RMI服务的过程分为以下7步;

1,创建远程方法接口,该接口必须继承自Remote接口

Remote 接口是一个标识接口,用于标识所包含的方法可以从非本地虚拟机上调用的接口,Remote接口本身不包含任何方法

  1. package server;  
  2.   
  3. import java.rmi.Remote;  
  4. import java.rmi.RemoteException;  
  5.   
  6. public interface Hello extends Remote {  
  7.     public String sayHello(String name) throws RemoteException;  
  8. }  

由于远程方法调用的本质依然是网络通信,只不过隐藏了底层实现,网络通信是经常会出现异常的,所以接口的所有方法都必须抛出RemoteException以说明该方法是有风险的

2,创建远程方法接口实现类:

UnicastRemoteObject类的构造函数抛出了RemoteException,故其继承类不能使用默认构造函数,继承类的构造函数必须也抛出RemoteException

由于方法参数返回值最终都将在网络上传输,故必须是可序列化的

  1. package server;  
  2.   
  3. import java.rmi.RemoteException;  
  4. import java.rmi.server.UnicastRemoteObject;  
  5.   
  6. public class HelloImpl extends UnicastRemoteObject implements Hello {  
  7.     private static final long serialVersionUID = -271947229644133464L;  
  8.   
  9.     public HelloImpl() throws RemoteException{  
  10.         super();  
  11.     }  
  12.   
  13.     public String sayHello(String name) throws RemoteException {  
  14.         return "Hello,"+name;  
  15.     }  
  16. }  

明天计划完成的事情:明天把这方案评审过了开始按步骤学习了,这两天太颓了

遇到的问题:暂无

收获:暂无


返回列表 返回列表
评论

    分享到