RMI的简单介绍

-深圳-Java-张高愿-

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

我们之前demo的方法调用都是在相同的Java虚拟机上进行的,调用方与被调用方都是在同一个堆上,但如果做分布式的话,服务端在服务器上运行,客户端在不同的计算机执行。怎样调用不同机器上的对象的方法呢? JDK提供的一个完善的、简单易用的远程调用框架—— RMI(Remote Method Invocation):远程方法调用,它要求客户端和服务器端都是Java程序。

2.知识剖析

什么是RMI:

RMI全称是Remote Method Invocation-远程方法调用,是纯Java的网络分布式应用系统的核心解决方案之一。 Java RMI 支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。 RMI目前使用Java远程消息交换协议JRMP进行通信。由于JRMP是专为Java对象制定的,用Java RMI开发的应用系统可以部署在任何支持JRE的平台上。 但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信。

Java语言解释器在工作时会忽略这些annotation,因此在JVM中这些annotation是“不起作用”的,只能通过配套的工具才能对这些annontaion类型的信息进行访问和处理。

3.常见问题

RMI的优点和原理是什么?

4.解决方案

RMI的主要优点:

1. RMI是Java编写的, 具有 “编写一次,到处运行 ” 的特性。任何基于RMI的系统均可100%地移植到 任何Java虚拟机上

2.面向对象:RMI可将完整的对象作为参数和返回值进行传递直接通过网络传输对象数据。

3.可移动属性:RMI可将属性从客户机移动到服务器,或者从服务器移到客户机。

4.设计方式:对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能。

5.安全:RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。

分布式和集群

分布式:一个业务分拆多个子业务,部署在不同的服务器上。

集群:同一个业务,部署在多个服务器上

RMI的原理

方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。

占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。

远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个服务器还是多个。

传输层管理实际的连接,并且追踪可以接受方法调用的远程对象。

服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。

返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。

RMI远程调用步骤

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

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

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

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

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

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

7. 客户对象获得返回值

5.编码实战

6.扩展思考

7.参考文献

CSDN、百度百科、师兄们提供的资料

8.更多讨论

谢谢大家观看,如有问题,恳请批评指正

by:深圳分院 -张高愿-