【C++从零实现Json-Rpc框架】第六弹——服务端模块划分

一、前言

        在第五弹中我们对项目的功能进行了讲解,接下来我们就服务端的角度,来设计对应模块,帮助服务端实现项目的三个功能:

●  rpc调用

● 服务的注册与发现以及服务的下线/上线通知

● 消息的发布订阅

二、正文

1. 服务端的功能需求

在进行服务端具体的模块划分之前,我们先来明确下服务端的功能需求

● 基于网络通信接受客户端的请求,提供rpc服务

● 基于网络通信接受客户端的请求,提供服务注册与发现,上线&下线通知

●  基于网络通信接受客户端的请求,提供主题操作(创建/删除/订阅/取消),消息发布

2. 服务端的模块划分 

基于上述的功能,我们对服务端可以划分出这么几个模块

***work:网络通信模块

Protocol: 应用层通信协议模块

Dispatcher:消息分发处理模块

RpcRouter: 远端调用路由功能模块

Publish-Subcriber: 发布订阅模块

Registry-Discovery:服务注册/发现/上线/下线功能模块

Server:基于以上模块整合而出的服务端模块

3. ***work模块

该模块为网络通信模块,实现底层的网络通信功能,这个模块本质上也是一个比较复杂庞大的模块块,由于项目的重点在于Rpc,因此该模块我们使用陈硕大佬的Muduo库来进行搭建

4. Protocol

当我们有了***work模块,双方就可以进行通信了,但是由于采取的TCP协议,因此数据在传输的时候,有可能会出现粘包问题,因此就需要存在应用层通信协议模块:解析数据,解决通信中有可能存在的粘包问题,能够获取到一条完整的消息

在前面的muduo库的基本使用中,我们能够知道想要让一个服务端/客户端对消息处理,就要设置一个onMessage的回调函数,在这个函数中对收到的数据进行应用层协议处理

而Protocol模块就是网络通信协议模块的设计,也就是在网络通信中,我们必须设计一个应用层的网络通信协议出来,以解决网络通信中可能存在的粘包问题,而解决粘包问题有三种方式:特殊字符间隔,定长,LV格式

     

转载请说明出处内容投诉
CSS教程网 » 【C++从零实现Json-Rpc框架】第六弹——服务端模块划分

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买