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 是组合关系。

相关推荐
red_redemption6 分钟前
自由学习记录(205)
学习
h_a_o777oah16 分钟前
【动态规划】区间 DP :三层循环逻辑与模板实现细节(洛谷 P1880)
c++·算法·动态规划·acm·区间dp·化环为链·石子合并
QiLinkOS28 分钟前
第三视觉理解徐玉生与他的商业活动(32)
大数据·c++·人工智能·算法·开源协议
犹豫的哑铃1 小时前
WebSocket 协议
网络·websocket·网络协议
汉克老师1 小时前
GESP2026年6月认证C++一级( 第一部分选择题(8-15))精讲
c++·continue·运算符·while·break·gesp1级·模运算
鹏易灵1 小时前
C++——7.类与对象,掌握封装、继承、多态.详解
开发语言·c++·算法
Mortalbreeze1 小时前
深入 Linux 线程机制(三):线程互斥——竞争条件与互斥锁的本质
linux·运维·服务器·c++·算法
汉克老师1 小时前
GESP2026年6月认证C++一级( 第一部分选择题(1-7))精讲
c++·运算符·表达式·赋值·gesp1级·输入与输出·单循环
ALex_zry1 小时前
C++26 Freestanding 库扩展详解:无操作系统也能用标准库
java·jvm·c++
码上有光2 小时前
c++:map和set的底层实现
android·java·c++·set·map