Java RMI远程方法调用详解
一、Java RMI机制:
远程方法调用
RMI(Remote Method Invocation),是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。
Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。
而RPC是远程过程调用(Remote Procedure Call)可以用于一个进程调用另一个进程(很可能在另一个远程主机上)中的过程,从而提供了过程的分布能力。Java 的 RMI 则在 RPC 的基础上向前又迈进了一步,即提供分布式对象间的通讯。
而RPC是远程过程调用(Remote Procedure Call)可以用于一个进程调用另一个进程(很可能在另一个远程主机上)中的过程,从而提供了过程的分布能力。Java 的 RMI 则在 RPC 的基础上向前又迈进了一步,即提供分布式对象间的通讯。
(1)RMI框架
【参考资料】
《Java网络编程精解》孙卫琴,这本书适合入门学习RMI框架基础
http://wenku.baidu.com/view/90171bd03186bceb19e8bbdc.html?from=search
RMI框架封装了所有底层通信细节,并且解决了编组、分布式垃圾收集、安全检查和并发性等通用问题。有了现成的框架,开发人员就只需专注于开发与特定问题领域相关的各种本地对象和远程对象。
要了解RMI原理,先了解一下Stub和Skeleton两个概念。
(2)Stub和Skeleton
RMI框架采用代理来负责客户与远程对象之间通过Socket进行通信的细节。RMI框架为远程对象分别生成了客户端代理和服务器端代理。
位于客户端的代理类称为存根(Stub),位于服务器端的代理类称为骨架(Skeleton)。
【
相关资料
】
《RMI(Remote Method Invocation)初窥门径》 http://blog.csdn.net/smcwwh/article/details/7080997
stub(存根)和skeleton(
骨架
)
在RMI中充当代理角色,在现实开发中主要是用来隐藏系统和网络的的差异, 这一部分的功能在RMI开发中对程序员是透明的。Stub为客户端编码远程命令并把他们发送到服务器。而Skeleton则是把远程命令解码,调用服务端的远程对象的方法,把结果在编码发给stub,然后stub再解码返回调用结果给客户端。
RMI远程过程调用的实现过程如下图所示:
![](http://hi.csdn.net/attachment/201112/17/0_13241393120QzB.gif)
RMI 框架的基本原理大概如下图,应用了代理模式来封装了本地存根与真实的远程对象进行通信的细节
【
参考资料
】
《Java RMI 框架(远程方法调用)》http://haolloyin.blog.51cto.com/1177454/332426
《 java RMI原理详解》 http://blog.csdn.net/xinghun_4/article/details/45787549