RPC 框架项目剖析

RPC 框架项目剖析

说明

本文用于梳理一个 rpc项目的实现细节,此项目基于cpp语言 大概三千行左右,用于学习目的。

项目链接:rpc项目

项目底层类

1.抽象消息类

描述:

各种消息的基类

属性:

消息id,消息类型,序列化返序列化方法。

派生类:

JsonMessage,再派生出请求,应答等。

2.抽象缓冲区类型

描述:

消息缓冲区(方便扩展,本项目使用的 moduo 库的缓冲区)

属性:

读缓冲区数据方法,判断缓冲区是否有数据等。

派生类:

MuduoBuffer

3.抽象协议类型

描述:

负责协议组织,协议解析等

派生类:

LVProtocol:

|--Len--|--VALUE--|

|--Len--|--mtype--|--idlen--|--id--|--body--|

4.抽象连接类

描述:

网络连接的基类

派生类:

MuduoConnection

5.抽象服务类

描述:

服务器基类

派生类:

MuduoServer

6.抽象客户端类

描述:

客户端基类

派生类:

MuduoClient

rpc_client模块

描述:

rpc请求客户端,有两种模式,1 直接连接某个提供rpc服务的服务器。2连接服务发现客户端,进行服务发现

组合关系:

  1. RpcCaller :负责进行服务请求,内部提供同步,异步,回调三种方式供上层调用,管理所有的请求。
  2. DiscoveryClient:对指定方法进行服务发现并返回rpc服务器host供客户端连接,内部通过回调方式管理上线,下线的服务
  3. _rpc_clients:管理rpc服务连接,注册回调至DiscoveryClient,服务下线时删除连接,保证一致性

rpc_server模块

描述:提供rpc服务的服务器。

组合关系:

  1. RegistryClient: 服务注册客户端,用于向服务注册中心注册服务,表示该服务上线。
  2. RpcRouter:管理服务器提供的服务,根据不同请求执行不同的服务并返回。

register_client模块

描述:向服务注册中心发起服务注册请求。

rpc_server中会有一个register_client用于服务注册;

register_server模块

描述:服务注册中心,负责转发服务上线的消息给注册过该服务的客户端,转发服务下线的消息给注册过该服务的客户端。

discover_client模块

描述:服务发现客户端,用于服务发现。存在于rpc_client中。

其他

本项目的网络通信是基于Muduo库的,所有的上层服务器继承于MuduoServer而MuduoServer继承于BaseServer与muduo::net::TcpServer是组合关系。MuduoConnection与muduo::net::TcpConnectionPtr 是组合关系。

相关推荐
汉克老师14 分钟前
GESP2025年9月认证C++五级真题与解析(单选题9-15)
c++·算法·贪心算法·排序算法·归并排序·gesp5级·gesp五级
科技林总16 分钟前
【系统分析师】4.7 Web服务
学习
飞鹰5129 分钟前
CUDA高级优化实战:Stream、特殊内存与卷积优化—Week3学习总结
c++·gpt·chatgpt·gpu算力
LaoZhangGong1231 小时前
学习TCP/IP的第6步:断开连接
网络·学习·tcp/ip·以太网
上海云盾安全满满1 小时前
如何隐藏业务的IP
网络·网络协议·tcp/ip
江苏世纪龙科技1 小时前
助力职校教学:大众ID.4 CROZZ新能源汽车维护与高压组件更换仿真教学软件
学习
txinyu的博客2 小时前
std::function
服务器·开发语言·c++
学嵌入式的小杨同学3 小时前
【嵌入式 C 语言实战】交互式栈管理系统:从功能实现到用户交互全解析
c语言·开发语言·arm开发·数据结构·c++·算法·链表
txinyu的博客3 小时前
static_cast、const_cast、dynamic_cast、reinterpret_cast
linux·c++
HyperAI超神经3 小时前
具身智能资源汇总:机器人学习数据集,在线体验世界建模模型,英伟达/字节/小米等最新研究论文
人工智能·深度学习·学习·机器学习·机器人·ai编程·图形生成