1. 程式人生 > >Memcached原始碼分析-命令解析(3)

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命令。