RPC和RMI之间的区别

作者: Laura McKinney
创建日期: 1 四月 2021
更新日期: 10 可能 2024
Anonim
从RMI到RPC看透Dubbo实现原理
视频: 从RMI到RPC看透Dubbo实现原理

内容


RPC和RMI是使客户端能够通过在客户端和服务器之间建立通信来从服务器调用过程或方法的机制。 RPC和RMI之间的共同区别是RPC仅支持 过程程序设计 而RMI支持 面向对象编程.

两者之间的另一个主要区别是传递给远程过程调用的参数包括: 普通数据结构。另一方面,传递给远程方法的参数包括 对象.

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较依据RPCRMI
支持程序编程
面向对象编程
参量普通的数据结构被传递给远程过程。对象被传递到远程方法。
效率低于RMI不仅限于RPC,还受到现代编程方法的支持(即,面向对象的范例)
开销更多
比较少
输入输出参数是必需的。不必要
提供简易的编程


RPC的定义

远程过程调用(RPC) 是一种针对分布式计算而设计的编程语言功能,它基于 当地程序 电话。它是远程服务的最常见形式,被设计为抽象过程调用机制的一种方式,以在通过网络连接的系统之间使用。它类似于IPC机制,在IPC机制中,操作系统允许进程管理共享数据并处理环境,在该环境中,不同进程在单独的系统上执行,并且必需要基于通信。


让我们了解如何通过给定的步骤实施RPC:

  • 客户端进程使用参数调用客户端存根,并且其执行被挂起,直到调用完成。
  • 然后,通过客户端存根进行编组,将参数转换为与机器无关的形式。然后准备包含参数表示形式的。
  • 为了找到站点的身份,客户端存根与存在远程过程的名称服务器进行互通。
  • 使用阻塞协议,客户端将存根到存在远程过程调用的站点。此步骤暂停客户端存根,直到得到答复。

  • 服务器站点接收来自客户端的发送,并将其转换为机器特定的格式。
  • 现在,服务器存根与参数一起在服务器过程上执行调用,并且服务器存根将中断,直到过程完成。
  • 服务器过程将生成的结果返回到服务器存根,然后在服务器存根中将结果转换为与机器无关的格式,并创建一个包含结果的。
  • 将结果发送到客户端存根,然后将其转换回适合客户端存根的特定于计算机的格式。
  • 在最后一个客户端,存根将结果返回到客户端进程。

RMI的定义

远程方法调用(RMI) 与RPC类似,但特定于语言并且是Java的功能。允许线程在远程对象上调用该方法。为了保持客户端和服务器端的透明性,它使用存根和框架实现了远程对象。存根与客户端一起驻留,对于远程对象,它充当代理。

当客户端调用远程方法时,将调用该远程方法的存根。客户存根负责创建和添加包含方法名称和已编组参数的宗地,而框架负责接收宗地。

框架取消编组参数并在服务器上调用所需的方法。骨架使用包裹封送给定的值(或异常),并将其发送给客户端存根。存根重新组装返回的包裹并将其发送给客户端。


在Java中,参数被传递给方法并以引用形式返回。对于RMI服务,这可能很麻烦,因为并非所有对象都可能是远程方法。因此,它必须确定哪些可以作为参考传递,哪些不能。

Java使用名为 序列化 对象作为值传递的位置。远程对象按值传递进行本地化。它还可以通过将对对象的远程引用以及存根类的URL一起传递,从而通过引用传递对象。通过引用传递限制了远程对象的存根。

  1. RPC支持过程编程范例,因此是基于C的,而RMI支持面向对象编程范例并且是基于Java的。
  2. 在RPC中传递给远程过程的参数是普通的数据结构。相反,RMI将对象作为参数传递给远程方法。
  3. RPC可被视为RMI的较早版本,并且在支持过程编程的编程语言中使用RPC,并且只能使用按值传递方法。相反,RMI工具是基于现代编程方法设计的,可以使用按值传递或引用传递。 RMI的另一个优点是可以更改通过引用传递的参数。
  4. RPC协议比RMI产生更多的开销。
  5. 在RPC中传递的参数必须为“进出”,这意味着传递给过程的值和输出值必须具有相同的数据类型。相反,没有强迫通过“进出RMI中的“”参数。
  6. 在RPC中,不可能引用,因为两个进程具有不同的地址空间,但是在RMI的情况下是可能的。

结论

RPC和RMI都具有相同的目的,但用于语言的语言支持不同的编程范例,因此具有不同的功能。