Java RMI - 简介

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

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

RMI应用程序的体系结构

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

  • 在服务器程序中,创建一个远程对象,并为客户端提供该对象的引用(使用注册表).

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

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

RMI Architecture

现在让我们讨论一下这个架构的组成部分.

  • 传输层 : 该层连接客户端和服务器.它管理现有连接并设置新连接.

  • Stub : 存根是客户端远程对象的表示(代理).它驻留在客户端系统中;它充当客户端程序的网关.

  • Skeleton : 这是驻留在服务器端的对象. 存根与此骨架通信以将请求传递给远程对象.

  • RRL(远程参考层) : 它是管理客户端对远程对象的引用的层.

使用RMI应用程序

以下几点总结了RMI应用程序的工作原理和减去;

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

  • 当客户端RRL收到请求时,它会调用对象<b的 invoke()方法>的RemoteRef 的.它将请求传递给服务器端的RRL.

  • 服务器端的RRL将请求传递给Skeleton(服务器上的代理)在服务器上调用所需的对象.

  • 结果一直传递回客户端.

编组和解组

每当客户端调用接受远程对象上的参数的方法时,参数都会在发送之前捆绑到一条消息中网络.这些参数可以是原始类型或对象.在基本类型的情况下,将参数放在一起并且将标题附加到其上.如果参数是对象,则将它们序列化.此过程称为编组.

在服务器端,打包参数是非捆绑的,然后调用所需的方法.此过程称为 unmarshalling .

RMI注册表

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

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

下图解释了整个过程和减去;

注册表

RMI的目标

以下是RMI&minus的目标;

  • 最小化应用程序的复杂性.

  • 保护类型安全.

  • 分布式垃圾收集.

  • 最大限度地减少使用本地和远程对象之间的区别.