【修真院java小课堂】RMI底层实现原理

大家好,我是IT修真院郑州分院第8期学员,一枚正直善良的java程序员。今天给大家分享一下,修真院官网 java任务中可能会使用到的知识点:


RMI底层实现原理


【修真院java小课堂】RMI底层实现原理20180706

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)。

2.知识剖析

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到底在哪

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

3.2 RMI是不是只有java才能用

4.编码实战

  • 查看源码中Stub、序列化等
  • 见视频

5.扩展思考

5.1 应用场景

  • 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.更多讨论

Q:JRMP与RMI什么关系?
A:JRMP是运行在Java远程方法调用(RMI)之下、TCP/IP之上的线路层协议

Q:Stub到底在哪?
A:Stub由服务端产生,但是在客户端使用

Q:除了RMI,还有什么远程调用的协议?
A:还有RPC,远程过程调用。这种协议是客户端访问服务器,等待服务器返回结果,而不是对象或者服务

PPT在这里

感谢大家观看!

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。

快来与我一起学习吧~http://www.jnshu.com/login/1/22140638

猜你喜欢

转载自blog.csdn.net/ZhanLiJueDuan/article/details/80951937