【网络】什么是RPC?RPC与HTTP有什么关系?
文章目录
- 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 stub到Server 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服务,并大获成功。
区别
-
"服务发现"机制不同。要向某个服务器建立连接,需要知道它的ip和端口。找到服务对应的ip和端口的过程,就是服务发现。
- HTTP 依靠DNS做服务发现。通过域名+DNS解析服务器的ip,默认80端口(如果要用其它端口,可以在服务端做反向代理)
(由于DNS也是服务发现的一种,所以也有基于DNS做服务发现的组件,如CoreDNS) - RPC 一般会有中间件来保存服务的ip和端口,比如consul等"服务发现"中间件,甚至Redis等存储服务。
- HTTP 依靠DNS做服务发现。通过域名+DNS解析服务器的ip,默认80端口(如果要用其它端口,可以在服务端做反向代理)
-
协议不同
- HTTP服务基于HTTP协议,HTTP是应用层协议,是位于TCP协议之上的。相比于TCP使用起来更方便,但效率更低。
另外,HTTP1.1之前是短连接,1.1之后默认是长连接,HTTP2.0又在前者的基础上做了很多改进,性能可能比某些RPC协议还要好。 - RPC通常基于TCP或UDP协议,效率更高,但使用起来更复杂。
TPC是长连接的,UDP是无连接的。
- HTTP服务基于HTTP协议,HTTP是应用层协议,是位于TCP协议之上的。相比于TCP使用起来更方便,但效率更低。
-
传输的内容不同
- HTTP 的设计目的是应用于Web服务,有固定的包格式,包括消息头、消息体。消息体的数据格式以字符串、图片音频文件为主,定制性弱。虽然数据最终都是以二进制的形式传输,但HTTP是应用层协议,只能使用接口提供的的固定的这些数据类型
- RPC 大都是基于TCP/UDP的,包格式由使用者定义,定制型更强、有效数据占比更高,且存储的直接就是二进制数据,用户想要传输什么,转为字节放入即可。
-
应用场景不同
- 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。它们各有优势,我们应当结合实际情况按需使用
相关文章:
【网络】什么是RPC?RPC与HTTP有什么关系?
文章目录RPC是什么RPC和HTTP的关系和区别[附]关于REST论文中提到的"HTTP不是RPC"重点参考 凤凰架构-远程过程调用 既然有HTTP为什么还要有RPC? RPC是什么 RPC(Remote Procedure Call):即远程过程调用,目的是为了让计算机能够跟调用…...
[手撕数据结构]栈的深入学习-java实现
CSDN的各位uu们你们好,今天千泽带来了栈的深入学习,我们会简单的用代码实现一下栈, 接下来让我们一起进入栈的神奇小世界吧!0.速览文章一、栈的定义1. 栈的概念2. 栈的图解二、栈的模拟实现三.栈的经典使用场景-逆波兰表达式总结一、栈的定义 1. 栈的概念 栈:一种…...
2.线性表的顺序表示
数据结构很重要! 数据结构很重要!!! 数据结构很重要!!!! 思考 1.线性表的顺序表示内容有哪些?(What) 2.为什么要学线性表的顺序表示? ? (Why)…...
eps文件删除了能恢复吗?恢复误删eps文件的三种方法
eps文件格式专为矢量图像和图形而设计。虽然没有被广泛使用,但它仍然受到各种插画家和平面设计师的钟爱。eps文件十分适合创建徽标和商标设计,主要应用见于广告牌、海报和横幅。可是在使用设备过程中,难免会遇到数据丢失问题,如果…...
【C++】运算符重载练习——Date 类
文章目录👉日期类介绍👈👉日期类实现👈📕 成员变量📕 构造函数📕 对应月份天数📕 赋值重载📕 比较运算符重载📕 计算 运算符重载👉源代码…...
Redis学习(13)之Lua脚本【环境准备】
文章目录一 Lua入门环境准备1.1 Lua简介1.2 Linux 系统安装Lua1.2.1 Lua 下载1.2.2 Lua 安装1.3 Hello World1.3.1 命令行模式1.3.2 脚本文件模式1.3.3 两种脚本运行方式1.4 Win安装Lua1.4.1 LuaForWindows的安装1.4.2 SciTE修改字体大小1.4.3 SciTE中文乱码1.4.4 SciTE快捷键工…...
关于BLE的一些知识总结
数据包长度对于BLE4.0/4.1来说,一个数据包的有效载荷最大为20字节对于BLE4.2以上,数据包的有效载荷扩大为251字节传输速率在不考虑跳频间隔的情况下,最大传输速率为:1)BLE4.0/4.1的理论吞吐率为39kb/s;2&am…...
Spring框架源码分析一
如何看源码(方法论)不要忽略源码中的注释使用翻译工具先梳理脉络,然后梳理细节即总分总,先总体过一遍,再看细节,再做一个总结大胆猜测(8分靠猜),小心验证,再调…...
CSS常用内容总结(扫盲)
文章目录前言相关概念【了解】脚本语言什么是脚本语言脚本语言有什么特点常见的脚本语言什么是动态语言,什么是静态语言动态语言和静态语言两者之间有何区别CSSCSS是什么CSS的特点一、CSS代码怎么写基本语法规则引入方式内部样式内联样式表外部样式代码风格二、CSS的…...
Java启蒙之语言基础
目录 一.Java标识符和关键字 1.1Java标识符 1.2Java关键字 二.数据类型和变量的概述和关系 2.1Java变量 2.2Java的数据类型 2.2.1数据类型的分类的概述 2.2.2数据类型的转换 3.Java运算符 总结 😽个人主页:tq02的博客_CSDN博客-领域博主 &#…...
数据库系统--T-SQL数据查询功能-多表查询(超详细/设计/实验/作业/练习)
目录课程名:数据库系统内容/作用:设计/实验/作业/练习学习:T-SQL数据查询功能-多表查询一、前言二、环境与设备三、内容四、内容练习题目:对应题目答案:五、总结课程名:数据库系统 内容/作用:设…...
Spring Boot 3.0系列【14】核心特性篇之Configuration相关注解汇总介绍
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言@Configuration@ConfigurationProperties@EnableConfigurationProperties@ConfigurationPropertiesScan@Configuratio…...
[ubuntu][jetson]给jetson增加swap空间类似于给windows加虚拟内存
具体操作如下: #打开性能模式 sudo nvpmodel -m 0 && sudo jetson_clocks #增加swap空间,防止爆内存 swapoff -a sudo fallocate -l 15G /swapfile sudo chmod 600 /var/swapfile sudo mkswap /swapfile sudo swapon /swapfile…...
小黑子—Java从入门到入土过程:第二章
Java零基础入门2.0Java系列第二章1. 注释和关键字2. 字面量3. 变量3.1 基本用法3.2 使用方式3.3 注意事项4. 变量练习5. 计算机中的数据存储5.1 计算机的存储规则5.2 进制5.3 进制间转换二进制转十八进制转十十六进制转十十进制转其他进制6. 数据类型7. 定义变量的练习8. 标识符…...
ElasticSearch搜索详细讲解与操作
全文检索基础 全文检索流程 流程: #mermaid-svg-7Eg2qFEl06PIEAxZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7Eg2qFEl06PIEAxZ .error-icon{fill:#552222;}#mermaid-svg-7Eg2qFEl06PIEAxZ .error…...
web实现太极八卦图、旋转动画、定位、角度、坐标、html、css、JavaScript、animation
文章目录前言1、html部分2、css部分3、JavaScript部分4、微信小程序演示前言 哈哈 1、html部分 <div class"great_ultimate_eight_diagrams_box"><div class"eight_diagrams_box"><div class"eight_diagrams"><div class&…...
【LeetCode】33. 搜索旋转排序数组、1290. 二进制链表转整数
作者:小卢 专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 33. 搜索旋转排序数组 1290. 二进制链表转整数 33. 搜索旋转排序数组 33. 搜索旋转排序…...
IBM Semeru Windows 下的安装 JDK 17
要搞清楚下载那个版本,请参考文章:来聊聊 OpenJDK 和 JVM 虚拟机下载地址semeru 有认证版和非认证版,主要是因为和 OpenJ9 的关系和操作系统的关系而使用不同的许可证罢了,本质代码是一样的。在 Windows 下没有认证版,…...
Lambda表达式和steram流
目录 引言: 语法: Lambda 表达式实例: demo演示: Stream流: 引言: Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数(函…...
面试必会-MySQL篇
1. Mysql查询语句的书写顺序Select [distinct ] <字段名称>from 表1 [ <join类型> join 表2 on <join条件> ]where <where条件>group by <字段>having <having条件>order by <排序字段>limit <起始偏移量,行数>2. Mysql查询语…...
从PointNet++到SoftGroup:手把手带你复现5个经典3D点云分割算法(附PyTorch代码)
从PointNet到SoftGroup:5大3D点云分割算法实战解析与PyTorch实现指南 1. 3D点云分割技术演进与核心挑战 在三维视觉领域,点云分割技术正经历着从基础架构到复杂系统的革命性演变。不同于传统图像处理,点云数据具有非结构化、稀疏性和无序性三…...
Ubuntu 20.04 虚拟机环境快速克隆与迁移实战指南
1. 为什么需要虚拟机环境克隆与迁移? 作为常年和虚拟机打交道的开发者,我深刻理解重复搭建环境的痛苦。每次新项目启动都要从头配置Ubuntu环境,安装依赖库,调试网络,这个过程至少要浪费半天时间。更可怕的是当团队需要…...
SpringBoot项目整合Redisson实战:从连接池报错到Redis集群健康检查的完整避坑指南
SpringBoot整合Redisson深度实践:连接池优化与集群健康监控全解析 Redis作为分布式系统的核心组件,其Java客户端Redisson的高阶用法一直是开发者关注的焦点。去年某电商平台大促期间,因Redis集群节点闪断导致的分布式锁失效事故,让…...
从libdatachannel到AioRTC:构建轻量级WebRTC原型实践指南
1. 为什么选择libdatachannel和AioRTC 最近在研究浏览器音视频流推送技术时,我发现WebRTC虽然强大但入门门槛较高。经过多轮技术选型对比,最终锁定了两个轻量级开源库:C的libdatachannel和Python的AioRTC。这两个项目特别适合快速原型开发&am…...
Python智能内存管理策略深度拆解(CPython内存池机制全图谱曝光)
第一章:Python智能内存管理策略全景导览Python 的内存管理并非由开发者手动控制,而是通过一套高度集成的自动化机制协同运作,涵盖引用计数、循环垃圾回收(GC)、内存池分配(pymalloc)三大核心支柱…...
手把手教你用ZPL指令在Zebra打印机上打印动态条码(附完整代码示例)
手把手教你用ZPL指令在Zebra打印机上打印动态条码(附完整代码示例) 在物流仓储、零售结算和智能制造场景中,自动生成并打印条码标签是提升作业效率的关键环节。Zebra打印机凭借其工业级稳定性和ZPL语言的高效指令集,成为行业标配…...
解密SWAT模型中的土壤水分特性:如何用SPAW快速计算AWC与饱和导水率?
土壤水分特性在SWAT模型中的关键作用与SPAW实战指南 土壤水分参数对水文模拟的影响机制 在分布式水文建模领域,土壤水分特性参数犹如隐藏在水循环方程式中的密码钥匙。这些看似简单的数值背后,实则决定着水分在土壤剖面中的运移轨迹、植物根系的吸水效率…...
为什么Stable Diffusion选择VQ-GAN?深入解析LDM背后的图像压缩技术
为什么Stable Diffusion选择VQ-GAN?深入解析LDM背后的图像压缩技术 在生成式AI领域,Stable Diffusion凭借其出色的图像生成质量和开源特性迅速成为行业标杆。但很少有人注意到,这个强大模型的核心竞争力之一,其实隐藏在它的第一阶…...
Linux服务器安装Linux宝塔面板并部署wordpress网站以及雷池WAF,设置禁止使用IP地址访问网站,只能使用域名访问网站
一、Linux服务器安装Linux宝塔面板 这个步骤参考网上其他教程。 二、Linux宝塔面板部署wordpress网站 这个步骤参考网上其他教程,保证网站能够正常访问,并且使用Linux宝塔面板申请并部署了SSL证书,使用https协议默认443端口正常访问网站。 三…...
DLSS Swapper:游戏性能优化的版本管理解决方案
DLSS Swapper:游戏性能优化的版本管理解决方案 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 在3A游戏日益复杂的图形渲染需求下,玩家常常面临画质与帧率的平衡难题。NVIDIA的DLSS技术通过AI超…...
