Memcached源码分析-命令解析(3)

#1 流程图

Memcached源码分析-命令解析(3)_第1张图片

2 流程说明

1 当进入到conn_read状态后,会调用try_read_network(),将socket数据读取到conn的rbuf中。
例如:char *rbuf = ‘set key 0 0 4\r\nget name\r\n’。
2 然后进入到conn_parse_cmd状态,调用try_read_command()方法
3 当前指针char *rcurr = rbuf。地址指到了字符开始的地址。
4 el = memchr(c->rcurr, ‘\n’, c->rbytes)查找第一个\n的位置
5 没有找到\n,conn_waiting,读取更多的数据
6 找到的位置为el; 判断el前一个字符是否有\r。如果有\r,将\r替换成\0。没有则\n替换\0
(下一个命令rcurr = el +1开始,即:get name\r\n)
char *rbuf = ‘set key 0 0 4\0\nget name\r\n’
7 调用process_command()函数。char *command = ‘set key 0 0 4\0’;
8 调用tokenize_command()函数。
char *command = ‘set key 0 0 4\0’;依次找空格,将每个token存到数组。
tokens[0].value = ‘set’
tokens[0].length= 3
tokens[1].value = ‘key’
tokens[1].length= 3
tokens[2].value = ‘0’
tokens[2].length= 1
tokens[3].value = ‘0’
tokens[3].length= 1
tokens[4].value = ‘4’
tokens[4].length= 1
9 根据tokens数组的大小ntokens以及tokens[0].value来调用不同的命令。默认tokens[0]表示memcached命令。

技术交流

CleverCode是一名架构师,技术交流,咨询问题,请加CleverCode创建的qq群(架构师俱乐部):517133582。加群和腾讯,阿里,百度,新浪等公司的架构师交流。【架构师俱乐部】宗旨:帮助你成长为架构师!
在这里插入图片描述

你可能感兴趣的:(memcached)