Java Rmi 简明教程
Java RMI - Introduction
RMI 代表 Remote Method Invocation 。它是一种允许驻留在一个系统(JVM)中的对象访问/调用运行在另一个 JVM 上的对象的机制。
RMI 用于构建分布式应用程序;它提供 Java 程序之间的远程通信。它在包 java.rmi 中提供。
Architecture of an RMI Application
在 RMI 应用程序中,我们编写两个程序,一个 server program (驻留在服务器上)和一个 client program (驻留在客户端上)。
-
在服务器程序内部,创建远程对象,并将该对象的引用提供给客户端(使用注册表)。
-
客户端程序请求服务器上的远程对象并尝试调用其方法。
下图显示了 RMI 应用程序的架构。
现在让我们讨论此架构的组件。
-
Transport Layer − 此层连接客户端和服务器。它管理现有连接,并设置新连接。
-
Stub − 存根是客户端处远程对象的表示(代理)。它驻留在客户端系统中;它充当客户端程序的网关。
-
Skeleton − 这是驻留在服务器端的对象。 stub 与此骨架通信以将请求传递到远程对象。
-
RRL(Remote Reference Layer) − 它是管理客户端对远程对象所做引用的层。
Working of an RMI Application
以下要点总结了 RMI 应用程序的工作原理 −
-
当客户端向远程对象发出调用时,它会被存根接收,然后存根最终会将此请求传递给 RRL。
-
当客户端 RRL 接收请求时,它会调用对象 remoteRef 的名为 invoke() 的方法。它将请求传递给服务器端的 RRL。
-
服务器端的 RRL 将请求传递给骨架(服务器上的代理),最终在服务器上调用所需对象。
-
结果会一路传递回客户端。
Marshalling and Unmarshalling
每当客户端调用远程对象上接受参数的方法时,参数都会被捆绑到消息中,然后通过网络发送。这些参数可能是基本类型或对象。如果是基本类型,则将参数放在一起并为其附加标题。如果是对象,则对它们进行序列化。此过程称为 marshalling 。
在服务器端,已打包的参数将被解绑,然后调用所需的方法。此过程称为 unmarshalling 。