RMI底层实现原理

分享人:韩亚博

1.背景介绍

2.知识剖析

3.常见问题

4.编码实战

5.扩展思考

6.参考文献

7.更多讨论

1.背景介绍

TCP/IP-->JRMP-->RMI

TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

Java远程方法协议(英语:Java Remote Method Protocol,JRMP)是特定于Java技术的、用于查找和引用远程对象的协议。这是运行在Java远程方法调用(RMI)之下、TCP/IP之上的线路层协议。

RMI(Remote Method Invocation,远程方法调用),是JAVA早在JDK 1.1中提供的JVM与JVM之间进行 对象方法调用的技术框架的实现(在JDK的后续版本中,又进行了改进)。通过RMI技术,某一个本地的JVM可以调用存在于另外一个JVM中的对象方法,就好像它仅仅是在调用本地JVM中某个对象方法一样。

RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。

RMI简述

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

2.知识剖析

2.1 RMI作用

2.2 RMI分析

2.1 RMI作用

RMI为使用Java对象的分布式计算提供了一个简单而直接的模型。这些对象可以是新的Java对象,也可以是现有API的简单Java包装器。Java采用“一次编写,随处运行模型.RMI扩展了Java模型,可以在任何地方运行。”

2.2 实现RMI的步骤

基于tcp/ip通信,那么需要IP+PORT-->注册

将对象/请求转换为传输的过程-->代理

这里写图片描述

注册

Rmiregistry需要在提供远程对象服务端启动,它提供了一个环境,说白了就是在内存中,开辟了一片空间,用来接受服务端服务程序的 注册,产生一个类似于数据库,提供存储检索远程对象功能的注册表。这个RMI注册表,就是我们常听到的RMI名字服务。远程客户端,就是依靠它获得存根,调用远程方法。

代理

Stub为客户端编码远程命令并把他们发送到服务器。而Skeleton则是把远程命令解码,调用服务端的远程对象的方法,把结果在编 码发给stub,然后stub再解码返回调用结果给客户端。

博采众生

3.常见问题

3.1 stub到底在哪

3.2 RMI是不是只有java才能用

3.1 stub到底在哪

从JDK5.0以后,stub就不需要rmic来产生了 ,而是由JVM自动处理。Stub存在于客户端,作为客户端的代理,让我们总是认为客户端产生了stub。实际上stub类是通过Java动态类 下载机制 下载的,它是由服务端产生,然后根据需要 动态加载到 客户端,如果下次再运行这个客户端该 存根类 存在于classpath中,就不需要再下载了,而是直接加载。

3.2 RMI是不是只有java才能用

不是

CodeProject上有一个RMI for C++

https://www.codeproject.com/Articles/9524/RMI-for-C

4.编码实战

模拟RMI

5.扩展思考

应用场景

RMI:使用JRMP协议承载数据描述。RMI可以开发企业分布式应用

6.参考文献

https://blog.csdn.net/column/details/sys-communication.html?&page=3

https://blog.csdn.net/yangdelong/article/details/4433035

https://blog.csdn.net/buhuikanjian/article/details/53105416

7.更多讨论

分享到此结束

欢迎大家讨论