【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 连接代码)。

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

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

相关推荐
wuminyu1 小时前
JVM虚拟线程的底层实现原理分析
java·linux·c语言·jvm·c++
keyipatience1 小时前
跳表详细解析
开发语言·数据结构·c++·算法·跳表
汉克老师1 小时前
GESP2026年9月认证C++一级( 第一部分选择题(8~15题)精讲
c++·gesp·小学生·学c++编程
小小、码农1 小时前
〖Linux文件系统〗:彻底打通文件 IO 全链路
linux·开发语言·数据结构·c++·系统
東隅已逝,桑榆非晚2 小时前
priority_queue的介绍和使用
c++·经验分享·笔记·学习
茉莉玫瑰花茶2 小时前
OpenGL [ 纹理 ]
开发语言·c++·opengl
余额瞒着我当琳3 小时前
C++ map 底层与AVL 树
开发语言·c++·算法
All for pursuit.3 小时前
【贪心-2】253.会议室 II
数据结构·c++·算法·leetcode
重生之小比特3 小时前
【C++进阶】异常
开发语言·c++