Java RMI 和 RPC 有啥区别?

Posted

技术标签:

【中文标题】Java RMI 和 RPC 有啥区别?【英文标题】:What is the difference between Java RMI and RPC?Java RMI 和 RPC 有什么区别? 【发布时间】:2021-10-12 21:58:37 【问题描述】:

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

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

【问题讨论】:

我认为 Java 中的 RMI 类似于 .Net 中的 gRPC... 【参考方案1】:

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

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

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

【讨论】:

这是不正确的。 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 我认为您链接到的文章指出,这个名称从“JAX-RPC”更改为“JAX-WS”的原因正是原来的名称不准确,因为这个规范不仅仅涉及传统意义上的“RPC”。所以这个关于 RPC 传统含义的答案仍然是正确的。 是的,我的意思是 RPC 起源于 C/Unix 世界(至少是最常见的 RPC 实现,ONCRPC),因此它是根据该计算模型建模的;当然,没有什么能阻止在任何其他编程语言之上实现它 对语义使用方式的意见略有不同不会导致答案错误(或误导)。读过这篇文章的人都可以很容易地理解,“C based”基本上意味着“面向过程”——任何学习过 Java 的人都知道 POP 与 OOP 的区别。 @xji JAX-RPC 是基于 Java 的。最初的 Sun RPC 是基于 C 的,但这个想法可以用多种语言实现,包括 Java。【参考方案2】:

RPC 和RMI 的主要区别在于RMI 涉及对象。我们不使用代理函数远程调用过程,而是使用代理对象

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

RMI 也比 RPC 更先进,允许 动态调用,其中接口可以在运行时更改,以及 对象适配,它提供了额外的抽象层。

【讨论】:

【参考方案3】:

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 来公开/使用肥皂服务。我可以称之为 RPC 类型机制吗?据我了解,在 JAX-WS 中,我们使用 java 反射 API 调用远程方法。所以它与RPC的定义相匹配。请确认!【参考方案4】:

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

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

    您可以认为调用 RPC 就像调用 C 过程一样。 RPC 支持原始数据类型,而 RMI 支持方法参数/返回类型作为 java 对象。

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

    与 RMI 不同,RPC 是语言中立的,RMI 仅限于 java

    RMI 比 RPC 慢一点

看看这个article 在 C 中的 RPC 实现

【讨论】:

【参考方案5】:

RMI 或远程方法调用是 非常类似于 RPC 或 Remote 客户端调用过程中 都将代理对象(或存根)发送到 服务器然而微妙 区别在于客户端 RPC 通过代理调用FUNCTIONS 函数和 RMI 调用 METHODS 通过代理功能。 RMI 是 被认为略胜一筹 面向对象的版本的 RPC。

来自here。

如需更多信息和示例,请联系look here。

【讨论】:

method是java中调用的函数,function是c/c++中调用的方法。那么还有什么区别呢? 不同之处在于(在实例方法的情况下),有一个调用对象。调用对象要么需要发送(连同其代码),要么需要存在于删除服务器上,但有一种方法可以在本地服务器上引用。 忽略特定的编程语言如何处理方法与函数,文学上的意思是函数返回一个值,而方法修改状态。 RPC 通过代理函数调用 FUNCTIONS,RMI 使用代理 OBJECT 调用 METHODS。对吗? 客户端通常不会“向服务器发送代理对象(或存根)”。引用质量差。【参考方案6】:

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

【讨论】:

【参考方案7】:

RMI和RPC的区别在于:

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

【讨论】:

methodfunction 之间,您隐含地强调但没有澄清的区别是什么?在 Java 中没有函数……但据我所知,在 OOP 中,它们是同义词,invocationcall 也是同义词。 RPC 调用一个过程/函数 - 彻底结束。【参考方案8】:

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

Java RMI 也实现了相同的功能,但略有不同。它使用对远程对象的引用。所以,它的作用是发送对远程对象的引用以及要调用的方法的名称。这会更好,因为它在大型程序的情况下会产生更清晰的代码,并且通过网络分发对象使多个客户端可以调用服务器中的方法,而不是建立每个连接单独。

【讨论】:

具体来说,哪个协议是“RPC”?据我所知,RPC 有两打协议,其中一半可用于 Java。 @foo 毫无疑问,他指的是 Sun-RPC,但所有 RPC 都指远程过程调用,没有对象或方法,因此它并不真正相关。

以上是关于Java RMI 和 RPC 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

RPC与RMI的区别

干货RMI与RPC的区别

简论远程通信(RPC,Webservice,RMI,JMS的区别)

远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)