Memcached源码分析——连接状态变化分析


转换条件限定:TCP,ASCII协议。(状态不包括conn_swallow,二进制协议才会用到此状态)

1 总揽

enum conn_states {
    conn_listening,  /**< the socket which listens for connections /主线程等待链接*/
    conn_new_cmd,    /**< Prepare connection for next command /worker线程等待命令*/
    conn_waiting,    /**< waiting for a readable socket /worker线程等待sdf中有可读信息*/
    conn_read,       /**< reading in a command line /worker线程读命令*/
    conn_parse_cmd,  /**< try to parse a command from the input buffer /woker线程*/
    conn_write,      /**< writing out a simple response /worker线程*/
    conn_nread,      /**< reading in a fixed number of bytes /worker线程由于命令没读完,继续读取*/
    conn_swallow,    /**< swallowing unnecessary bytes w/o storing /worker线程,ASCII协议不涉及此状态*/
    conn_closing,    /**< closing this connection */
    conn_mwrite,     /**< writing out many items sequentially /worker线程,响应内容中写出*/
    conn_max_state   /**< Max state value (used for assertion) /用于标记conn_states边界,超出说明states有错*/
};

2 接收连接分发给worker线程

 

3 数据读入

4 命令解析

5 命令返回

6 结果输出

7 小结

以上就是整个连接状态的转换情况了,分析不到位或者有误的地方还请大家指正。总体来说,感觉Memcached对libevent的应用写的十分标准,后续使用libevent时,也可以从Memcached中学习到很多知识。

相关内容