Memcached源码分析——连接状态变化分析
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中学习到很多知识。
评论暂时关闭