2010-04-28 105 views

回答

108

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

使用RPC,您可以调用导出到服务器的远程函数,在RMI中可以引用远程对象并调用它们的方法,还可以传递并返回更多可以在多个JVM实例中分发的远程对象引用。它更强大。

当需要开发比纯粹的客户端 - 服务器架构更复杂的东西时,RMI脱颖而出。通过网络分散对象非常容易,使所有客户端都能够进行通信,而无需明确建立单独的连接。

+9

这是不正确的。 RPC也是基于Java的。 JAX-RPC 1.1被替换为2.0,然后被重命名为JAX-WS。在Java中,当您谈论RPC时,您正在谈论SOAP和Web服务。这是一篇关于JAX-RPC 1.1更改为JAX-WS的文章。 http://www.ibm.com/developerworks/library/ws-tip-jaxwsrpc/ – MattC 2015-04-10 14:19:52

+0

@MATC我认为你链接的文章指出,这个名字的原因从“JAX-RPC”改为“JAX-WS “的确如此,原来的名称并不准确,因为该规范涉及的不仅仅是传统意义上的”RPC“。所以这个答案,谈论RPC传统意义,仍然是正确的。 – 2016-05-11 08:55:38

+0

是的,我的意思是RPC起源于C/Unix世界(至少是最常见的RPC实现,ONCRPC),因此它是在该计算模型之后建模的;当然没有什么可以阻止在任何其他编程语言的基础上实现它的误导性答案 – fortran 2016-05-12 15:13:55

6

RMI或远程方法Invokation是 非常类似于RPC或远程 过程调用在客户端 同时发送的代理对象(或存根),以 服务器然而微妙 不同的是,客户端RPC 调用功能通过代理 函数和RMI调用方法 通过代理功能。 RMI是 认为稍优,因为它是 面向对象的版本的RPC。

here

欲了解更多信息和示例,请致电look here

+5

方法是在java中调用的函数,函数是在c/C++中调用的方法。那么还有什么区别? – starcorn 2011-02-09 07:07:18

+1

区别在于(在实例方法的情况下),有一个调用对象。调用对象或者需要被发送(连同它的代码),或者需要在移除服务器上运行,但有一种方法可以在本地服务器上引用。 – 2012-02-09 13:40:16

+0

忽略具体的编程语言如何处理方法与函数,其文学含义是函数返回一个值,而方法修改状态。 – Dan 2015-04-05 18:28:51

31

RPC与RMI的主要区别在于RMI涉及到对象。代替使用代理函数远程调用过程,我们改为使用代理对象

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

RMI也比RPC更先进的,允许动态调用,其中接口可以在运行时改变,并且对象适配,它提供了一个抽象的附加层。

5

RPC和RMI之间唯一真正的区别在于RMI中包含对象:不是通过代理函数调用函数,而是通过代理调用方法。

6

RMI和RPC之间的差别在于:

  • RMI顾名思义远程方法调用:它调用一个方法或对象。并且
  • RPC它调用一个函数。
+1

您在“方法”和“函数”之间隐含地强调了哪些差异,但没有澄清?在Java中没有函数......但在OOP中,据我所知,它们是同义词,“调用”和“调用”也是同义词。 – mins 2014-08-29 05:39:33

8

1.方法:

RMI使用其中用户需要知道对象,他需要调用该对象的方法中的面向对象的范例。

RPC不处理对象。而是调用已经建立的特定子程序。

2.工作:

随着RPC,你会得到一个过程调用,看起来很像一个本地电话。 RPC处理将呼叫从本地传递到远程计算机所涉及的复杂性。

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

RMI = RPC +对象取向

3.更好之一:

RMI是一个较好的方法相比RPC,尤其是对于较大的程序,因为它提供了一个清洁器代码如果出现问题,更容易识别。

4.系统示例:

RPC系统: SUN RPC,DCE RPC

RMI系统: 的Java RMI,CORBA,微软DCOM/COM +,SOAP(简单对象访问Protocol)

6

Remote Procedure Call(RPC)是一个进程间通信,它允许在驻留在本地或远程机器上的另一个进程中调用一个函数。

远程方法调用(RMI)是一个API,它实现在RPC用java支持面向对象的范式。

  1. 你能想到调用RPC的是像调用C程序。 RPC支持原始数据类型,其中RMI支持将方法参数/返回类型作为java对象。

  2. 与RPC不同,RMI很容易编程。您可以根据对象来思考业务逻辑,而不是一系列基本数据类型。

  3. RPC是语言不像RMI,这是仅限于Java的中性

  4. RMI是稍微慢一点的RPC

在C

1
看看这个 article的RPC实现

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

+0

客户端不会在RPC或RMI中将代理对象(或存根)发送到服务器。客户端在RMI中有一个* local *代理对象,在RPC中有一个包装函数。 – EJP 2016-03-23 07:34:48

2

RPC是基于C.It可以调用远程过程,使它看起来像本地call.RPC的旧协议处理是通过远程调用服务器和获取结果客户端的复杂性。

Java RMI的也达到了同样的事情,但略有differently.It用来远程对象。所以引用,它的作用是将其发送到远程对象的引用非常久远的方法的名称invoke.It更好,因为它在大型程序的情况下会产生更清晰的代码,并且通过网络分发对象还可以使多个客户端调用服务器中的方法,而不是单独建立每个连接。