【网络】什么是RPC?RPC与HTTP有什么关系?

article/2025/9/21 17:30:12

文章目录

  • RPC是什么
  • RPC和HTTP的关系和区别
  • [附]关于REST论文中提到的"HTTP不是RPC"


重点参考
凤凰架构-远程过程调用
既然有HTTP为什么还要有RPC?


RPC是什么

RPC(Remote Procedure Call):即远程过程调用,目的是为了让计算机能够跟调用本地方法一样去调用远程方法

RPC本身并不是一个具体的协议,而是对不同应用程序间通信的一种描述,一种通信思想。它可以使用很多技术来实现,有大量不同底层实现的RPC库(如早期的DCOM、CORBA,现在的dubbo、protobuf、grpc等等)。

RPC通常是基于TCP/UDP协议的,传输效率高、可定制性强、数据包小。

以下是一个远程过程调用的核心流程。RPC包含的就是从User stubServer stub的过程,包括了打包/解包、序列化/反序列化、发送/接收等通讯细节
在这里插入图片描述


RPC和HTTP的关系和区别

很多人喜欢把RPC与HTTP作比较,因为HTTP是web领域最常用的网络通信协议,而RPC也是进行网络通信的方法,并且有一些RPC库还是基于HTTP实现的。在大多数人看来,HTTP已经是比较万能的通信协议了,于是就对RPC的定位感到捉摸不透。

正如开头所说,RPC本身并不是一个具体的协议,而是一种设计,一种通信思想,通讯协议只是其中一部分。
RPC跟HTTP不是对立面,RPC也可以使用HTTP作为通讯协议

TCP是70年代出来的协议,RPC是80年代出现的,HTTP是90年代才开始流行的。
RPC比HTTP出现的更早。一直以来,都有大量的不同底层实现的RPC库(如早期的DCOM、CORBA,现在的Thrift、Dubbo、Protobuf、gRPC等等)。

但也正因为RPC仅仅是一种思想,所以互联网厂商并没有一种统一的协议可以使用。随着Web的发展,浏览器为了能够与所有的网站服务通信,就需要一个统一的通信标准,于是HTTP就成为了这个通信标准。而且不同于RPC"面向过程"的思想,HTTP以"面向资源"的思想构建Web服务,并大获成功。

区别

  1. "服务发现"机制不同。要向某个服务器建立连接,需要知道它的ip和端口。找到服务对应的ip和端口的过程,就是服务发现。

    • HTTP 依靠DNS做服务发现。通过域名+DNS解析服务器的ip,默认80端口(如果要用其它端口,可以在服务端做反向代理)
      (由于DNS也是服务发现的一种,所以也有基于DNS做服务发现的组件,如CoreDNS)
    • RPC 一般会有中间件来保存服务的ip和端口,比如consul等"服务发现"中间件,甚至Redis等存储服务。
  2. 协议不同

    • HTTP服务基于HTTP协议,HTTP是应用层协议,是位于TCP协议之上的。相比于TCP使用起来更方便,但效率更低。
      另外,HTTP1.1之前是短连接,1.1之后默认是长连接,HTTP2.0又在前者的基础上做了很多改进,性能可能比某些RPC协议还要好。
    • RPC通常基于TCP或UDP协议,效率更高,但使用起来更复杂。
      TPC是长连接的,UDP是无连接的。
  3. 传输的内容不同

    • HTTP 的设计目的是应用于Web服务,有固定的包格式,包括消息头、消息体。消息体的数据格式以字符串、图片音频文件为主,定制性弱。虽然数据最终都是以二进制的形式传输,但HTTP是应用层协议,只能使用接口提供的的固定的这些数据类型
    • RPC 大都是基于TCP/UDP的,包格式由使用者定义,定制型更强有效数据占比更高,且存储的直接就是二进制数据,用户想要传输什么,转为字节放入即可。
  4. 应用场景不同

    • HTTP多用于B/S,RPC多用于C/S。但现在已经分的没这么清了,因为B/S和C/S在融合,很多软件同时支持多端(比如百度云盘,即支持网页端,还支持手机端和PC端)
    • 现在HTTP多用于Web服务端与客户端的通信;RPC多用于服务器各个微服务之间的通讯,以及对延迟和带宽有要求的游戏通信
    • HTTP虽然方便,但性能较低。对性能有要求时,就需要直接使用RPC实现通信目的,加快传输效率,例如分布式服务间、游戏C/S端的高效、低延迟的通信需求。

[附]关于REST论文中提到的"HTTP不是RPC"

摘自REST论文
在这里插入图片描述

如果想了解这个问题,不得不了解REST。关于REST,我在《【REST系列】详解REST架构风格》中有详细的解释

简单说。HTTP和RPC都是实现网络通信的方式,只是它们对待通信的理解方式有所不同:根据REST的思想得知,HTTP认为的通信是对资源的操作,而RPC认为的通信则是调用远程函数。

更简单地说。HTTP的设计是面向资源的,而RPC的本质是面向过程的。所以严格来说,HTTP确实不属于RPC。
平时我们只会觉得 它们都能传输我们想要传输的数据,而不会深究这些核心思想上的区别,这也无可厚非。

在REST思想中,Web通信实际上是对资源的操作。REST流行之前,Web通信还是以SOAP为主,而SOAP其实就是一个RPC的实现。从最终结果来看,HTTP"面向资源"的思想 在Web领域是成功的。

面向资源和面向过程,就像编程语言中的面向对象和面向过程。HTTP在Web领域的成功,并不能说明RPC思想不好,只能说HTTP比RPC更适合用于Web。它们各有优势,我们应当结合实际情况按需使用


http://chatgpt.dhexx.cn/article/Ag0JiYtP.shtml

相关文章

电脑显示RPC服务器不可用是什么意思,rpc服务器不可用怎么办?rpc服务器不可用是什么意思...

很多人在使用打印机会都遇到rpc服务器不可用的问题,一时之间不知道rpc服务器不可用怎么办,无法作出有效的修复,为了解决一问题,我们首先要明白rpc服务器不可用是什么意思。 rpc服务器全称RPCremote procedure call,它是…

【网络】一文带你了解什么是RPC

一文带你了解什么是RPC 为什么要有RPC什么是RPCPRC架构组件RPC和SOA、SOAP、REST的区别RPC框架需要解决的问题?RPC的实现基础?RPC使用了哪些关键技术?主流RPC框架有哪些 为什么要有RPC http接口是在接口不多、系统与系统交互较少的情况下,初期常使用的一种通信手…

什么是RPC框架?

什么是RPC? In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it wer…

什么是RPC

提到RPC(Remote Procedure Call),就躲不开提到分布式,这个促使RPC诞生的领域。 假设你有一个Calculator,以及它的实现类CalculatorImpl,那么单体应用时,要调用Calculator的add方法来执行一个加…

证书服务器rpc服务器不可用是什么意思,rpc服务器不可用是什么意思

rpc服务器不可用是什么意思 用户在使用电脑进行时间同步,安装打印机或者其它的操作的时候可能会遇到同样一个问题,那就是提示“RPC服务器不可用”,很多朋友可能对于RPC并不了解,更不知道如何解决,下面就一起来看看这个…

RPC是什么意思?

原文地址:http://baike.baidu.com/link?urlZV6b0T5v04pem1NluXrFwslmhOosGK3YAeKYBfXHF3J-cg96O7CE9j_opGpKCftpBKWqLtY9-LycDAX0ULaLpssX4IIVmK6fSdtZBzz6nbFRsA-vXppB4IV1KBfDu07pY2dgZYTn5A65RkuhPO00bf5ngU6qfujFC14JqgumBPLgqXgt1VnAzQ7xOwSbJbJkqtNcGRdPxt9f…

rpc协议服务器是什么,什么是rpc框架

第五,返回值还要发送回服务器A上的应用,也要经过序列化的方式发送,服务器A接到后,再反序列化,恢复为内存中的表达方式,交给A服务器上的应用 这里写图片描述 为什么RPC呢?就是无法在一个进程内&a…

rpc协议服务器是什么,RPC是什么?

RPC是什么? REST和RPC都常用于微服务架构中。 都是网络交互的协议规范。 通常用于多个微服务之间的通信协议。 RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。 什么是RPC 远程方法调用…

RPC简介

1. 概述 RPC(Remote Procedure Call),即远程过程调用,是一种通过网络从远程计算机程序上请求服务、而不需要了解底层网络技术的协议。RPC协议假定某些传输协议(如TCP或UDP)的存在,为通信程序之…

【OS笔记 28】处理死锁的四种方法——预防死锁(破坏四个必要条件之一)

前面讲过预防死锁是通过破坏死锁的四个必要条件,所以就有四个预防死锁的方法吗?错!只有三种,因为互斥条件是必须的,不仅不能改变,还应该加以保证。因此只能破坏后三个条件。 一、破坏请求和保持条件 • 方…

什么是死锁,产生死锁的必要条件,以及避免死锁的方法

一、死锁的定义 死锁是指,有两个或两个以上的线程在执行的过程中,由于竞争的资源或者彼此通信而造成的一种阻塞状态,若无外力作用,他们将都无法进行下去,从而形成一直阻塞的状态叫死锁。 简单来说就是…

死锁产生的四个必要条件?如何避免和预防死锁产生?

一、什么是死锁? 两个线程或两个以上线程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是这些线程都陷入了无限的等待中,这就是死锁。 举个例子:如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已…

死锁产生的原因和必要条件详解

3.5 产生死锁的原因和必要条件 在多道程序系统中,虽借助于多个进程的并发执行,改善了系统的资源利用率,提高了系统的吞吐量,但可能发生一种危险——死锁。 死锁(deadlock): 是指多个进程在运…

死锁概念,死锁产生的四个必要条件,如何避免和预防死锁

一、死锁概念 死锁是指两个或多个进程在执行的过程中,因为竞争资源而造成互相等待的现象,若无外力作用,它们都无法推进下去。 1.在等待对方时占有不可抢占的资源 举个例子,假设有P1,P2两个进程,都需要A和…

关于死锁,死锁的四个必要条件的总结

什么是死锁? 死锁,指的是多个进程再运行期间因争夺资源而产生的一种僵局,若无外力作用(破坏死锁),程序将无法运行。 死锁产生的四个必要条件 互斥条件: 进程要求对所分配的资源(如…

死锁产生的四个必要条件

一、死锁产生的四个必要条件 互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者…

什么是死锁?死锁发生的四个必要条件是什么?如何避免和预防死锁产生?

什么是死锁? 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程…

死锁和产生死锁的四个必要条件以及如何避免和预防死锁

什么是死锁 如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程就是死锁的。 死锁出现的场景 (1)多个线程:彼此申请对方资源而导致的死锁。A申请B的资源时,因为资源被占用&am…

理解死锁产生的四个必要条件

死锁的定义 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进…

死锁,死锁的四个必要条件以及处理策略

一、什么是死锁二、死锁与饥饿三、资源的类型 3.1 可重用资源和消耗性资源 3.1.1 可重用资源(永久性资源)3.1.2 消耗性资源(临时性资源) 3.2 可抢占资源和不可抢占资源 3.2.1 可抢占资源3.2.2 不可抢占资源 四、死锁产生的原因 4…