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

相关推荐
db_murphy21 小时前
学习篇 | 英方i2Active和i2Stream工具了解
学习
OliverH-yishuihan21 小时前
在win10上借助WSL用VS2019开发跨平台项目实例
linux·c++·windows
强子感冒了21 小时前
Java学习笔记:String、StringBuilder与StringBuffer
java·开发语言·笔记·学习
汉克老师1 天前
GESP2025年12月认证C++二级真题与解析(编程题1 (环保能量球))
c++·gesp二级·gesp2级
BullSmall1 天前
Doris的备份及恢复方案
学习
小李子不吃李子1 天前
人工智能与创新第二章练习题
人工智能·学习
郝学胜-神的一滴1 天前
Linux进程与线程控制原语对比:双刃出鞘,各显锋芒
linux·服务器·开发语言·数据结构·c++·程序人生
青岛少儿编程-王老师1 天前
CCF编程能力等级认证GESP—C++2级—20251227
java·开发语言·c++
javachen__1 天前
341-十道经典程序设计题目
数据结构·c++·算法
wregjru1 天前
【C++】2.6 红黑树及其实现(附代码)
开发语言·c++