Java RMI和RPC有什么区别?


163

Java RMI和RPC之间的实际区别是什么?

我在某些地方读过RMI使用对象?


我认为RMI在Java中就像gRPC在.Net中一样……
Yousha Aleayoub

Answers:


137

RPC基于C,因此具有结构化的编程语义,另一方面,RMI是基于Java的技术,并且它是面向对象的。

使用RPC,您可以仅调用导出到服务器中的远程函数,在RMI中,您可以具有对远程对象的引用并调用它们的方法,还可以传递并返回更多可以在许多JVM实例之间分发的远程对象引用,因此它的功能要强大得多。 。

当出现需要开发比纯客户端-服务器体系结构更复杂的内容时,RMI会脱颖而出。在网络上散布对象非常容易,使所有客户端都可以进行通信,而不必显式地建立单独的连接。


19
这是不正确的。RPC也是基于Java的。JAX-RPC 1.1替换为2.0,然后将其重命名为JAX-WS。在Java中,当谈论RPC时,就是在谈论SOAP和Web服务。这是一篇关于将JAX-RPC 1.1更改为JAX-WS的IBM文章。ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC 2015年

1
@MattC我认为您链接的文章指出,此名称从“ JAX-RPC”更改为“ JAX-WS”的原因完全是原始名称不准确,因为此规范涉及的不仅仅是“ RPC”在传统意义上。因此,这个有关RPC传统意义的答案仍然是正确的。
xji

2
是的,我的意思是RPC起源于C / Unix世界(至少是最常见的RPC实现,即ONCRPC),因此是根据该计算模型建模的;当然,没有什么可以阻止它在任何其他编程语言之上实现
fortran

6
在使用语义的方式上存在一点意见分歧不会使答案错误(或误导)。读过这篇文章的任何人都可以很容易地理解“基于C的”基本上意味着“面向过程”-任何学习过Java的人都知道POP与OOP的区别。
纳文·伊斯拉尼

nodejs客户端(例如)可以在服务器上调用RMI调用吗?有什么办法吗?
Hitesh Bajaj,

45

RPC和RMI之间的主要区别在于RMI涉及对象。与其使用代理功能远程调用过程,不如使用代理对象

RMI具有更高的透明度,即由于将对象,引用,继承,多态性和异常集成到该语言中,因此可以充分利用该语言。

RMI还比RPC更高级,它允许动态调用(其中接口可以在运行时更改)和对象适配对象适配)提供了附加的抽象层。


18

1.方法:

RMI使用面向对象的范例,其中用户需要了解对象以及需要调用的对象方法。

RPC不处理对象。而是,它调用已建立的特定子例程。

2.工作:

使用RPC,您将获得一个过程调用,该过程调用看起来非常像本地调用。RPC处理将呼叫从本地计算机传递到远程计算机所涉及的复杂性。

RMI做同样的事情,但是RMI将引用传递给对象和被调用的方法。

RMI = RPC +面向对象

3.更好的一个:

与RPC相比,RMI是更好的方法,特别是对于大型程序,因为它提供了更清晰的代码,可以更轻松地识别出问题。

4.系统示例:

RPC系统: SUN RPC,DCE RPC

RMI系统: Java RMI,CORBA,Microsoft DCOM / COM +,SOAP(简单对象访问协议)


在我的应用程序中,我正在使用JAX-WS公开/使用soap服务。我可以称之为RPC类型机制吗?据我了解,在JAX-WS中,我们正在使用Java反射API调用远程方法。因此,它与RPC的定义匹配。请确认 !
Gunjan Shah

11

远程过程调用(RPC)是一种进程间通信,它允许在驻留在本地或远程计算机中的另一个进程中调用函数。

远程方法调用(RMI)是一种API,它在Java中以面向对象范例的支持来实现RPC。

  1. 您可以想到调用RPC就像调用C过程。RPC支持原始数据类型,其中RMI作为Java对象支持方法参数/返回类型。

  2. 与RPC不同,RMI易于编程。您可以根据对象而不是原始数据类型序列来考虑业务逻辑。

  3. 与RMI不同,RPC与语言无关,RMI仅限于Java

  4. RMI比RPC慢一点

看一下本文中C的RPC实现


6

RMI或远程方法调用与RPC或远程过程调用非常相似,因为客户端都向服务器发送代理对象(或存根),但是细微的区别是客户端RPC 通过代理函数调用FUNCTIONS,而RMI通过代理函数调用方法 。代理功能。RMI被认为是稍微优越的,因为它是 RPC 的面向对象版本。

这里

有关更多信息和示例,请在此处查看


5
方法是在Java中调用的函数,功能是在c / c ++中调用的方法。那么还有什么区别呢?
starcorn'2

1
区别在于(对于实例方法)存在一个调用对象。调用对象要么需要发送(连同其代码),要么需要驻留在删除服务器上,但是可以在本地服务器上进行引用。
Ellen Spertus'2

忽略特定的编程语言如何对待方法与函数相比,其字面意义是函数返回值,而方法修改状态。
2015年

RPC通过代理功能调用FUNCTIONS,而RMI使用代理对象调用方法。对?
Noor Nawaz 2015年

客户端通常不会“将代理对象(或存根)发送到服务器”。质量引用不良。
的洛恩侯爵

6

RPC和RMI之间的唯一真正区别是RMI中涉及对象:我们不是通过代理功能调用功能,而是通过代理调用方法。


6

RMI和RPC之间的区别在于:

  • RMI名称表示远程方法调用:它调用方法或对象。和
  • RPC它调用一个函数。

2
您隐含地强调但没有弄清a method和a 之间的区别是function什么?在Java中没有的功能...但在OOP据我记得,他们是同义词,所以是invocationcall
2014年

RPC调用一个过程/函数-扩展。

3

RPC是基于C的旧协议,它可以调用远程过程并使它看起来像本地调用.RPC处理将远程调用传递给服务器并将结果传递给客户端的复杂性。

Java RMI也实现了相同的功能,但略有不同,它使用了对远程对象的引用,因此它的作用是将对远程对象的引用与要调用的方法的名称一起发送出去。大型程序的情况下,通过代码编写代码以及通过网络分配对象,可使多个客户端调用服务器中的方法,而不必分别建立每个连接。


具体来说,哪个协议是“ RPC”?据我所知,RPC有两种协议,而Java有一半可用。

@foo毫无疑问,他指的是Sun-RPC,但是所有RPC都意味着远程过程调用,nO对象或方法,因此它实际上并不相关。
洛恩侯爵
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.