前言
在之前的章节中,我们梳理了项目的整体功能规划。今天从服务端视角出发,进行核心模块的设计与划分,目标是支撑三大核心能力:RPC 调用、服务注册发现(含上下线通知)、以及消息的发布订阅。
服务端功能需求
明确需求是设计的基础。服务端主要承担以下职责:
- 基于网络通信接收客户端请求,提供 RPC 服务。
- 处理服务的注册与发现,并管理上线/下线通知。
- 支持主题操作(创建、删除、订阅、取消)及消息发布。
服务端模块划分
围绕上述需求,我们将服务端拆分为以下几个关键模块:
- Network:底层网络通信模块。
- Protocol:应用层通信协议模块,解决粘包等问题。
- Dispatcher:消息分发与处理模块。
- RpcRouter:远端调用路由功能。
- Publish-Subscriber:发布订阅模块。
- Registry-Discovery:服务注册、发现及状态管理。
- Server:整合以上模块的主入口。
Network 模块
作为基础,该模块负责底层的网络 IO。考虑到项目重心在于 RPC 业务逻辑的实现,而非重复造轮子,我们直接采用陈硕大佬开源的 Muduo 库来构建网络层。这能让我们更专注于上层业务逻辑的打磨,同时保证网络层的稳定性。
Protocol 模块
有了 Network 层,双方即可建立连接。但 TCP 是流式协议,传输过程中容易出现'粘包'或'拆包'现象。因此,必须设计一套应用层协议来界定消息边界。
在 Muduo 的使用中,我们通过设置 onMessage 回调函数来处理接收到的数据。Protocol 模块的核心任务就是解析这些数据,确保获取到一条完整的业务消息。
解决粘包问题通常有三种经典方案:特殊字符间隔、定长格式、LV(Length-Value)格式。在本项目中,我们将根据实际报文结构选择合适的方案,确保通信的高效与可靠。


