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 它调用一个函数。【讨论】:
在method
和function
之间,您隐含地强调但没有澄清的区别是什么?在 Java 中没有函数……但据我所知,在 OOP 中,它们是同义词,invocation
和 call
也是同义词。
RPC 调用一个过程/函数 - 彻底结束。【参考方案8】:
RPC 是基于 C 的旧协议。它可以调用远程过程并使其看起来像本地调用。RPC 处理将远程调用传递给服务器并获取结果的复杂性给客户。
Java RMI 也实现了相同的功能,但略有不同。它使用对远程对象的引用。所以,它的作用是发送对远程对象的引用以及要调用的方法的名称。这会更好,因为它在大型程序的情况下会产生更清晰的代码,并且通过网络分发对象使多个客户端可以调用服务器中的方法,而不是建立每个连接单独。
【讨论】:
具体来说,哪个协议是“RPC”?据我所知,RPC 有两打协议,其中一半可用于 Java。 @foo 毫无疑问,他指的是 Sun-RPC,但所有 RPC 都指远程过程调用,没有对象或方法,因此它并不真正相关。以上是关于Java RMI 和 RPC 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
JAVA远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
简论远程通信(RPC,Webservice,RMI,JMS的区别)