RPC和RMI有什么区别?

4

目前在研究RPC和RMI,对它们的区别有些困惑。

在实现RMI和gRPC时,语法基本相同。

它们都有接口来确定方法参数和响应。

它们都可以在参数中发送对象(Java RMI原生支持,C# gRPC使用proto)。

它们都通过在某个对象上调用方法(基于接口)来执行请求到服务器的过程。

那么它们的区别在哪里呢?是数据传输过程在客户端和服务器之间发生的方式吗?

从表面上看,RMI只是RPC的Java实现,而gRPC是C#实现。


这个回答解决了你的问题吗?Java RMI和RPC有什么区别? - user207421
@user207421 我猜你应该把这个发表为一个答案,因为争论基本上围绕着Java和类C语言展开... - Mismatch
1个回答

3
RPC代表远程过程调用,支持过程式编程。它几乎像IPC机制一样,只要软件允许进程管理共享信息,就可以在不同的系统上执行不同的进程,并且基本上需要基于消息的通信。 rpc 上图显示了PRC实现的工作步骤。
RMI代表远程方法调用,类似于PRC,但它支持面向对象编程,这是Java的特性。一个线程被允许调用外部对象上的方法。在RMI中,对象作为参数传递而不是普通数据。

rmi

这个图示展示了RMI协议的客户端-服务器架构。
RPC和RMI都很相似,但是它们之间的基本区别在于RPC支持过程式编程,而RMI支持面向对象编程。
让我们看看RPC和RMI之间的区别:

rmi vs rpc


你写道:“在RMI中,对象作为参数传递而不是普通数据。”我猜普通数据指的是原始类型?如果是这样,C# gRPC也可以使用proto传递对象,那么它不也是在做同样的事情吗? - Sam H
一个远程对象的参数或返回值可以是任何可序列化的对象。这包括原始类型、远程对象和实现了java.io.Serializable接口的非远程对象。 - user14349884
@SamH 我本来也想问同样的问题,但是考虑到Java中的JAX-RPC(自2015年以来被取代的标准,但仍然是官方RPC),因为它允许所有相同的... - Mismatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接