桂林市网站建设_网站建设公司_CMS_seo优化
2025/12/27 17:40:47 网站建设 项目流程

前言

介绍

所谓kvstore就是类似于redis服务器的一种思想,通过自定义的一些协议,能够根据网络层recv到的数据进行解析,然后去到kvstore中的引擎层拿到想要的数据,最后封装组织回发。
自定义协议可以如下–CRUD:

  1. SET:set key value
  2. GET:get key
  3. DEL:del key
  4. MOD:mod key value
  5. EXIST:exist key

基于上一章节kvstore (一) 网络层设计,我们已经实现了将接收完数据后获取接收数据,并进行处理(上节只是做了简单打印)的函数kvs_protocol(char* msg , int length , char * response)通过函数指针的方式可以传递到各个网络框架的recvsend层面,本节就要对该业务方法进行实现。具体思路如下:

  1. 分割解析字符串 --msg:将字符串按照协议格式进行分割,并将指针存储到数组中。kvs_filter_token(char*msg , char *token[])
  2. 解析字符串(过滤器/分析器):对分割后的字符串进行识别,并在其内部调用引擎层的方法,比如:kvs_array_set()等方法

协议层设计

intkvs_protocol(char*msg,intlength,char*response){//其实此处按照协议格式只需要为3,但是为了防止set key value1 value2 ....这种,可以设定大一些char*tokens[kvs_max_tokens]={0};//分割字符串(为解析协议做准备)intcount=kvs_split_token(msg,tokens);//识别分割的字符串,并分别调用对应的业务逻辑set、get....returnkvs_filter_protocol(tokens,count,response);}

1. 分割解析字符串

核心思想:

  1. 利用strtok()方法,将msg进行“ ”分割,并且按照索引存到tokens数组中
  2. 分解后的tokens[0]:set/get/mod/del,tokens[1]:key,tokens[2]:key
kvs_split_token(char*msg,char*tokens[]){......}

2. 解析字符串tokens[0],tokens[1],tokens[2]

2.1 定义一个枚举和指针数组

此处为了方便循环遍历,我么可以定义一个枚举,里面对应着指针数组char *command[]中的具体执行参数。

....
.....

2.2 根据解析到的cmd,分别调用不同的方法

利用2.1中定义的方便遍历的enum,可以通过switch - case进行处理:

  1. KVS_CMD_SET:----kvs_array_set
  2. KVS_CMD_GET:----kvs_array_get
  3. KVS_CMD_MOD:----kvs_array_MOD
  4. KVS_CMD_EXIST:----kvs_array_EXIST
......

引擎array初步实现

根据上述所讲,已经可以实现接收到的数据包的解析,因此我们需要一个数据结构作为引擎对数据进行存储、修改、删除等
这里先使用简单的array数组捋清楚引擎层的思路,后续引入更为高效的数据结构。


数组数据结构图片 –


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询