Java RMI介绍

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

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

RMI应用程序的体系结构

RMI应用程序中,我们编写了两个程序,一个服务器程序(位于服务器上)和一个客户机程序(位于客户端上)。

  • 在服务器程序中,创建一个远程对象,该对象的引用可被客户端(使用注册表)使用。
  • 客户端程序请求服务器上的远程对象,并尝试调用其方法。

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

下面我们来讨论这个架构的组件。

  • 传输层(Transport Layer) - 此层连接客户端和服务器。它管理现有的连接,并设置新的连接。
  • 存根(Stub) - 存根是客户端上的远程对象的表示(代理)。 它位于客户端系统中; 它作为客户端程序的网关。
  • 骨架(Skeleton) - 它位于服务器端的对象。 存根与此骨架通信以将请求传递给远程对象。
  • RRL(远程参考层) - 它是管理客户端对远程对象的引用的层。

RMI应用程序的工作

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

  • 当客户端调用远程对象时,它被存根最终传递给RRL。
  • 当客户端RRL接收到请求时,它会调用对象remoteRef的一个名为invoke()的方法。 它将请求传递到服务器端的RRL。
  • 服务器端的RRL将请求传递到服务器上的最后调用所需对象的Skeleton(服务器上的代理)。
  • 结果一直传递给客户端。

编组和解组

每当客户端调用接受远程对象上的参数的方法时,在通过网络发送之前,将参数捆绑到消息中。 这些参数可能是原始类型或对象。 在原始类型的情况下,将参数放在一起并附加标题。 如果参数是对象,那么它们被序列化。 这个过程被称为编组。

在服务器端,打包参数是未分组的,然后调用所需的方法。这个过程被称为解组。

RMI注册表

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

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

下图说明了整个过程 -

RMI目标

以下是RMI的目标 -

  • 最小化应用程序的复杂性。
  • 保护类型安全。
  • 分布式垃圾收集。
  • 最小化使用本地和远程对象之间的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧浩海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值