【C++】手撕JRpc框架(梳理RPC流程)

项目介绍

PRC 远程过程调用,是一种通过网络从远程计算机上请求服务,而不需要了解底层网络通信细节,PRC可以使用多种网络协议进行通信,如HTTP、TCP、UDP等,并且在TCP/IP网络四层模型中跨越了传输层和应用层。

简而言之PRC就是像调用本地方法一样调用远程方法

过程可以理解为业务处理、计算任务,更直白的说,就是程序/方法/函数等,就是像调用本地方法一样调用远程方法

我们用大白话来说:

  • PRC就是让你像调用本地函数一样,去调用另一台服务器上的函数
  • 本地调用:你的代码写 add(1,2),这是在你自己的电脑内存里面算出来的
  • 远程调用:你写 add(1,2),这行代码实际上是把请求发送到了另一台电脑(服务器)上,那这台电脑算完后把结果传回给你。虽然代码写法几乎一样,但底层发生了网络通信

PRC核心流程图解(包裹快递版)

假设:你在北京(客户端),你的朋友在上海(服务端),你想让他帮你买一杯咖啡(远程调用函数)

阶段一:客户端准备(北京)

  1. 调用本地函数:你的脑子里想着"我要喝咖啡"
  2. 网络协议(打包) :你不能直接把"想喝咖啡"的脑电波发过去,你需要写一张纸条:"帮我买杯冰美式,钱在红包里面"。这个过程在PRC里叫反序列化(把对象变成二进制数据)。PRC框架就是那个帮你打包的快递员
  3. 操作系统内核/网络接口(发货):快递员把包裹交给顺丰的货车,货车开上高速公路。这对应图里底部的"操作系统内核"和"网络接口"

阶段二:网络传输(高速公路)

  • 包裹在高速公路上飞驰。这就是图中间那条连接两边的长线。RPC 可以走 HTTP 公路,也可以走 TCP 专线

阶段三:网络服务器处理(上海)

  1. 操作系统内核/网络接口(收货):上海的顺丰货车收到包裹
  2. 网络协议(拆包): 上海的快递员把纸条拿出来,看懂了你需要"冰美式"。这个过程叫 反序列化
  3. **远程函数处理(执行):**你朋友拿着钱,真的跑去咖啡店买了一杯冰美式。这就是服务器真正执行了那段代码

阶段四:返回结果(回程)

  1. 网络协议模块(再打包):你朋友把咖啡装进保温箱,贴上回执单

  2. 操作系统内核/网络接口(回货):交给顺丰发回北京

  3. 客户端收到结果:你在北京收到咖啡,RPC 框架把结果交回给你的代码,你的代码继续往下执行

为什么需要"快递公司"(RPC框架)?

如果没有 RPC 框架(快递公司):

  • 你需要自己造一辆车(写 TCP 连接代码)。

  • 你需要自己学外语跟上海人沟通(处理网络字节序、协议解析)。

  • 你需要自己记路(处理网络超时、断线重连)。

相关推荐
青少儿编程课堂13 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛
wo_jack2 小时前
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
数据结构·c++·面试·stl·list
青少儿编程课堂3 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园连连看解析
c++·python·算法·bfs·信息学竞赛
草莓熊Lotso3 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
David猪大卫21 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger21 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
努力努力再努力wz1 天前
【Lua 进阶系列】从 C++ 对象到 Lua 变量:一文理解 userdata、Lua 栈与元表绑定机制
c++·junit·lua
慧都产品智能化1 天前
Qt 表格升级攻略:复用已有编辑器,减少重复开发
c++·qt·编辑器·qt6.3
ShineWinsu1 天前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
ShineWinsu1 天前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem