📜  Java RMI-简介

📅  最后修改于: 2020-11-15 03:18:58             🧑  作者: Mango


RMI代表远程方法调用。它是一种允许驻留在一个系统(JVM)中的对象访问/调用在另一个JVM上运行的对象的机制。

RMI用于构建分布式应用程序;它提供Java程序之间的远程通信。它在包java.rmi中提供

RMI应用程序的体系结构

在RMI应用程序中,我们编写两个程序,一个服务器程序(驻留在服务器上)和一个客户端程序(驻留在客户端上)。

  • 在服务器程序内部,将创建一个远程对象,并使该对象的引用可用于客户端(使用注册表)。

  • 客户端程序在服务器上请求远程对象,并尝试调用其方法。

下图显示了RMI应用程序的体系结构。

RMI架构

现在让我们讨论该体系结构的组件。

  • 传输层-此层连接客户端和服务器。它管理现有连接并建立新连接。

  • 存根-存根是客户端上远程对象的表示(代理)。它位于客户端系统中;它充当客户端程序的网关。

  • 骨架-这是位于服务器端的对象。存根与此骨架进行通信,以将请求传递给远程对象。

  • RRL(远程参考层) -它是管理客户端对远程对象所做的参考的层。

RMI应用程序的工作

以下几点总结了RMI应用程序的工作方式-

  • 当客户端调用远程对象时,存根会接收到该对象,该存根最终将该请求传递给RRL。

  • 当客户端RRL收到请求时,它将调用对象remoteRef的称为invoke()的方法。它将请求传递到服务器端的RRL。

  • 服务器端的RRL将请求传递给骨架(服务器上的代理),该骨架最终在服务器上调用所需的对象。

  • 结果一路传递回客户端。

编组和拆组

每当客户端调用在远程对象上接受参数的方法时,这些参数就会捆绑成一条消息,然后再通过网络发送。这些参数可以是原始类型或对象。如果是原始类型,则将参数放在一起并在其上附加标题。如果参数是对象,则将其序列化。此过程称为编组

在服务器端,打包的参数将取消捆绑,然后调用所需的方法。此过程称为解组

RMI注册中心

RMI注册表是一个放置所有服务器对象的名称空间。每次服务器创建一个对象时,它将向RMIregistry注册该对象(使用bind()reBind()方法)。这些是使用称为绑定名的唯一名称注册的。

要调用远程对象,客户端需要该对象的引用。那时,客户端使用其绑定名称(使用lookup()方法)从注册表中获取对象。

下图说明了整个过程-

登记处

RMI的目标

以下是RMI的目标-

  • 为了最小化应用程序的复杂性。
  • 为了保持类型安全。
  • 分布式垃圾回收。
  • 最小化使用本地对象和远程对象之间的差异。