
一、前言
在第五弹中我们对项目的功能进行了讲解,接下来从服务端角度设计对应模块,帮助服务端实现以下三个功能:
- RPC 调用
- 服务注册与发现及上下线通知
- 消息的发布订阅
二、正文
1. 服务端的功能需求
在进行服务端具体的模块划分之前,先明确服务端的功能需求:
- 基于网络通信接收客户端请求,提供 RPC 服务
- 基于网络通信接收客户端请求,提供服务注册与发现及上下线通知
- 基于网络通信接收客户端请求,提供主题操作(创建/删除/订阅/取消)及消息发布
2. 服务端的模块划分
基于上述功能,服务端可划分为以下模块:
- Network:网络通信模块
- Protocol:应用层通信协议模块
- Dispatcher:消息分发处理模块
- RpcRouter:远端调用路由功能模块
- Publish-Subscriber:发布订阅模块
- Registry-Discovery:服务注册/发现/上线/下线功能模块
- Server:基于以上模块整合而成的服务端模块
3. Network 模块
该模块为网络通信模块,实现底层的网络通信功能。由于项目重点在于 RPC,因此该模块采用陈硕的 Muduo 库进行搭建。
4. Protocol
有了 Network 模块后,双方可以进行通信。但由于采用 TCP 协议,数据传输时可能出现粘包问题,因此需要应用层通信协议模块来解析数据,解决粘包问题并获取完整消息。
在 Muduo 库的基本使用中,设置 onMessage 回调函数处理收到的数据。Protocol 模块的设计即是在网络通信中定义应用层协议以解决粘包问题。解决粘包问题的三种方式包括:特殊字符间隔、定长、LV 格式。


