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连接服务发现客户端,进行服务发现
组合关系:
- RpcCaller :负责进行服务请求,内部提供同步,异步,回调三种方式供上层调用,管理所有的请求。
- DiscoveryClient:对指定方法进行服务发现并返回rpc服务器host供客户端连接,内部通过回调方式管理上线,下线的服务
- _rpc_clients:管理rpc服务连接,注册回调至DiscoveryClient,服务下线时删除连接,保证一致性。
rpc_server模块
描述:提供rpc服务的服务器。
组合关系:
- RegistryClient: 服务注册客户端,用于向服务注册中心注册服务,表示该服务上线。
- RpcRouter:管理服务器提供的服务,根据不同请求执行不同的服务并返回。
register_client模块
描述:向服务注册中心发起服务注册请求。
rpc_server中会有一个register_client用于服务注册;
register_server模块
描述:服务注册中心,负责转发服务上线的消息给注册过该服务的客户端,转发服务下线的消息给注册过该服务的客户端。
discover_client模块
描述:服务发现客户端,用于服务发现。存在于rpc_client中。
其他
本项目的网络通信是基于Muduo库的,所有的上层服务器继承于MuduoServer而MuduoServer继承于BaseServer与muduo::net::TcpServer是组合关系。MuduoConnection与muduo::net::TcpConnectionPtr 是组合关系。