这篇文章主要介绍Memcached中,基于libevent构造的主线程和worker线程所处理连接的状态互相转换的过程(不涉数据的存取等操作),也就是drive_machine的主要业务逻辑了。状态转换过程没有涉及所有状态,同时,由于自己能力问题,一些状态转换还可能有错,还请各位前辈指正。转换条件限定:TCP,ASCII协议。(状态不包括conn_swallow,二进制协议才会用到此状态)

1 总揽

首先介绍连接,连接是Memcached自己定义的连接conn。的所有状态,drive_machine()主要就是对这些状态的转换进行操作:

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有错*/
};

在Memcached.c的main()中,主线程以及worker线程完成必要初始化,绑定相应libevent事件,随后主线程监听绑定监听相应端口,正式做好循环的准备。下图是总体连接状态的总体转换图。

2 接收连接分发给worker线程

aaarticlea/png;base64,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" alt="" width="324" height="241" />

  1. 主线程初始化后,连接便进入conn_listening状态,等待连接。
  2. 当有连接连入,主线程通过dispatch_conn_new()向管道写入字符c,将连接分发给某个worker线程,worker线程收到,连接进入conn_new_cmd等待状态。

3 数据读入

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh8AAAHQCAIAAACOaZ96AAAgAElEQVR4nOyd/1cb15n/+WOYf0KrH+7ZPXD2OD4Q0XXCcTZErvBmQ9NE7lE4TZYmhlZZkq0B29M2pTGwq+A2wW2iJDXGNlW6tmGxtVYwlvGgbEAJHRmD4pohMWoSz+eH58M9N/MNIY1m7oye9w8+45l7n3nNneG+9dw7XxpUVV1bW1PNtbq6arF1aWnJYms1kZEKqZCqTKpisdjc3EwYXbp0yXWqGkVGKq9QNbhOUIu6SIVU9UYliiK1ls7OTk6oahEZqbxChe6CVEjlByo2faGJi+tUtYiMVF6hQndBKqTyCRWkL2ziwgOV7ZGRyitUDWtra7lcbs1ci4uLFlvn5+cttlYTGamQCqn2RCVJUlNT04cffsgVle2RkcorVM7lLqVSKZPJTE9Pj46OdnZ2EqfU0dExOjo6OjqayWRyuVyVx+tMWyEVb1ROXrH1oHA47PAZBPF2XfmbqubuUiqVpqen+/r69u/fH41G+/r6RkdHz549+9ApraysgLtEo9HOzs729vbXX38dbKaC48VrqD6pCCGOXbH1IEKIw2cQxNt15W+q2rrL22+/3d7e3tfXd/Hixe3tbbcv6YcPHz6UZfmdd97p7OyMRqP5fH6vx+vW2drc3LTYurW1VXHdYrFYo8i1o7p3757FVnQX/oXuUg9UtXKXfD7f1dXV39+/sbHh9pVsrOvXr3d0dAwPDyuKUv7xunW2UKysfQvdhX8RQmRZlmV5fX3dmTMI8ms/zidVTdwlk8l0dXUtLCx8y73eeuutaDTKGgyfZwvFyhV3cftS9ZWou8iy7MwZBPm1H+eTyn53uXTp0gsvvHD//n23L+ByJUnSc889VygUyjledBcehO7idaG71AOVze4yOTn5b//2b1999dU3npIkSc8//zxc6HyeLU8olUqFQqFgMCiKYk135Iq7uH2R+kroLvVAZae7ZLPZ559/3nPWAlpYWPjBD37w4MEDPs8W/0qlUoIgJJNJWIjH47XbF7qL14XuUg9UtrmLoiiRSGR1ddXt67Zyvf322z//+c8///zzKtt017aqIHKVkiRJVdV0Op1Op+lKWE6n0/QvXJKkdDoNhdm6UFKzHpRIJCKRiKqqoVCIpiyJREIQhJociaqq6C7eF7pLPVA1rK6uLi4urporm81abM1kMrDw4osvnj9//muP69VXX/3Nb37z+eefmx2vLW1lFtn6Jt2KlU6ng8FgKBSKRCLBYBDMQFVVQRDYNbFYLBgMxuNxKAllYCX8KwgCa06JRALqguuwW9PpdE3dZX19veKzUNkZJIS4fW36SoSQ2zty5gyCdv0brDgyUukj25O75HK5SCTi9hVrg9bW1lpaWr744guz4/Vi7gJ9PXT9sizTfl8QhFgsBsuwnt47JwiCJEmwEn5dskGor7A/PDXe47/cxe1r01fC3KUeqOxxl56eno8++sjtK9Ye/du//dv7779v1n95113of1l30WQb8R3BJkh6aMVgMAjlIenR7AXdBVW+0F3qgcoGd4HE5W9+0eLi4lNPPSXL8rfffltZm1q0lcVW190FzIOKrqQVqbuoqhqPx2EYjQ2bSqUM92i7XHEXty9MXwndpR6obHCX/v7+Dz/80O3L1U49//zzFy9evH//fmVtatFWFlvddRfNyBhIkiTDkTEq8BgYXmNna2DypkaHo6K7eF/oLvVAZYO7tLe3f/bZZ6Wq1draevPmTfrf2dnZ1tZW6yrllKlAb7755smTJw3TF01b7ektMjy7i6qqMMMfj8dhDp9daTirT5VMJtUdK4pEIpFIBKZtanQ4qkvuYvtlVs8qx11KpZLm76uaMwjyaz/OJ1W17jI9PR2JRKq/2vL5/KFDh9g1s7OzfX19mmI3v6vR0dEjR47Q/164cMEWs7l16xYMjunTF9pWly5d6uzszGaz5beVi3ck629E1qwEwc3HmvV0DTsyZrGjXctUL3QXbnX8+PHjx4/vWszaXZaXlycmJtrb20ulkl1nEOTXfpxPqmrd5fjx47/61a+qvyj7+vry+Twsz87Oss5x4cKFI0eOwCZahpbUO5At2r9//yeffHLnzh19m4KvEELa29v31FZef5qyHHdxRugu3Kqvr6+cP0kzdymVShMTE62trYSQvr4+G88gyK/9OJ9U1brLSy+99MEHH2xXraGhoe3t7dHR0XA4vLKysr29PTMz09vbqy+5sbExOjo6MzMzMzMDDkSXR0dHqycBPffccxcvXpRlucT8erp06VI4HKZfQBoeHt5TW3ndXeijLa7LFXex69Lyt3p7ew3/bDXSuwv4SltbG/37mpubs/EMgvzaj/NJVa27PPvss5cvX67yijxy5Mj58+dn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" alt="" width="494" height="422" />

  1. conn_new_cmd等待新的连接,当连接写入时,如果当前请求过多,可能对其他worker线程造成饥饿,更改事件类型为EV_WRITE,退出。
  2. 如果连接不多,且有未读数据,说明上一次有未处理完的命令,进入conn_parse_cmd,以便继续处理命令。
  3. 如果连接不多,且是新连接,表明没有未读数据,则连接进入conn_waiting状态等待数据(命令)到来。
  4. conn_waiting,线程等待连接中的后续数据,如果有数据会设置当前socket fd为读事件EV_READ,确保后续内容的读入。在conn_read中,调用try_read_network()尝试从socket fd中读东西,如果没有数据则返回conn_waiting,如果有数据则进入conn_parse_cmd,等待处理命令。

4 命令解析

aaarticlea/png;base64,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" alt="" />

  1. 进入conn_parse_cmd后,收到命令,调用try_read_command()对用户命令进行解析,这里分析ASCII协议命令,其中会调用process_command()来处理用户的命令。
  2. 根据用户的命令,会调用不同类型的命令。如set,replace等命令对应update_command();incr,decr对应process_arithmetic_command();gets对应process_get_command()等。
  3. 如果是更新类型的命令,则还需要读入更新的内容,进入conn_nread状态。
  4. 其他类型的命令已经可以等待返回结果了。

5 命令返回

aaarticlea/png;base64,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" alt="" />

  1. 命令执行后会有响应,如果命令只需要反馈一个执行结果,则通过out_string()函数来输出结果,进入conn_write阶段。
  2. 如果是get命令,则需要打印get的内容,则进入conn_mwrite阶段。
  3. conn_write阶段的case语句没有break,所以正常打印也会进入conn_mwrite。

6 结果输出

aaarticlea/png;base64,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" alt="" />

  1. conn_mwrite会中,会调用transmit()将响应结果进行输出。transmit()检查当前结果的写入状态。
  2. 如果数据写完,则改变状态为conn_new_cmd等待新的命令。
  3. 如果没有写完,则继续等待,直到写完。

7 小结

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

Memcached源码分析——连接状态变化分析(drive_machine)的更多相关文章

  1. Memcached源码分析之请求处理(状态机)

    作者:Calix 一)上文 在上一篇线程模型的分析中,我们知道,worker线程和主线程都调用了同一个函数,conn_new进行事件监听,并返回conn结构体对象.最终有事件到达时,调用同一个函数ev ...

  2. Memcached源码分析之线程模型

    作者:Calix 一)模型分析 memcached到底是如何处理我们的网络连接的? memcached通过epoll(使用libevent,下面具体再讲)实现异步的服务器,但仍然使用多线程,主要有两种 ...

  3. Memcached源码分析之从SET命令开始说起

    作者:Calix 如果直接把memcached的源码从main函数开始说,恐怕会有点头大,所以这里以一句经典的“SET”命令简单地开个头,算是回忆一下memcached的作用,后面的结构篇中关于命令解 ...

  4. Memcached源码分析

    作者:Calix,转载请注明出处:http://calixwu.com 最近研究了一下memcached的源码,在这里系统总结了一下笔记和理解,写了几 篇源码分析和大家分享,整个系列分为“结构篇”和“ ...

  5. Memcached源码分析之内存管理

    先再说明一下,我本次分析的memcached版本是1.4.20,有些旧的版本关于内存管理的机制和数据结构与1.4.20有一定的差异(本文中会提到). 一)模型分析在开始解剖memcached关于内存管 ...

  6. memcached源码分析-----item过期失效处理以及LRU爬虫

    memcached源码分析-----item过期失效处理以及LRU爬虫,memcached-----item 转载请注明出处:http://blog.csdn.net/luotuo44/article ...

  7. Okhttp3源码解析(3)-Call分析(整体流程)

    ### 前言 前面我们讲了 [Okhttp的基本用法](https://www.jianshu.com/p/8e404d9c160f) [Okhttp3源码解析(1)-OkHttpClient分析]( ...

  8. 物联网防火墙himqtt源码之MQTT协议分析

    物联网防火墙himqtt源码之MQTT协议分析 himqtt是首款完整源码的高性能MQTT物联网防火墙 - MQTT Application FireWall,C语言编写,采用epoll模式支持数十万 ...

  9. Netty 源码学习——客户端流程分析

    Netty 源码学习--客户端流程分析 友情提醒: 需要观看者具备一些 NIO 的知识,否则看起来有的地方可能会不明白. 使用版本依赖 <dependency> <groupId&g ...

随机推荐

  1. 在delphi原有控件基础上画图

    var C:TControlCanvas; begin C := TControlCanvas.Create; C.Pen.Color := clRed; C.Pen.Width := ; C.Con ...

  2. 2018-2019-2 网络对抗技术 20165301 Exp6 信息搜集与漏洞扫描

    2018-2019-2 网络对抗技术 20165301 Exp6 信息搜集与漏洞扫描 1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应用 (2)DNS ...

  3. LINUX下PHP编译添加相应的动态扩展模块so(不需要重新编译PHP,以openssl.so为例)

    本文转自:原文链接  http://www.cnblogs.com/doseoer/p/4367536.html 网上我看到有很多相关的文章都是简述这个问题的,但毕竟因为LINUX版本众多,很多LIU ...

  4. 百度地图sdk定位和遇到的坑

    封装定位服务类: import android.content.Context; import com.baidu.location.BDAbstractLocationListener; impor ...

  5. day1 str字符串常用方法

    字符串是编程中常用的类型,字符型在内存中是以单个形式存储的,比如name = "alex",在内存中存储的形式为["a","l"," ...

  6. openssl asn.1 生成DER文件,把DER文件转换成内部数据结构

    1 在实现之前,先来介绍如何生成der文件,有了源数据才能进行验证和测试.生成的方法是使用在openssl的命令中使用*asn1parse*根据配置文件来生成.详情如下: 1.1 创建配置文件test ...

  7. 在CentOS7命令行模式下安装虚拟机

    转载:https://blog.csdn.net/sunnyfg/article/details/51493602 1.主机环境描述: 操作系统:CentOS7 系统GUI:无 CPU:Intel4代 ...

  8. Scrapy 笔记(一)

    这篇文章主要是对的scrapy命令行使用的一个介绍 创建爬虫项目 scrapy startproject 项目名例子如下: scrapy startproject test1 You can star ...

  9. 导出php5.4支持的数组格式,即以[]为标识符而不是以array()标识

    //导出php数组,以[]为标识符而不是以array() if (!function_exists('varExport')) { //导出php数组,以[]为标识符而不是以array() funct ...

  10. 【转载】Picasso下载器

    Github源码地址:https://github.com/JakeWharton/picasso2-okhttp3-downloader 使用方法: Gradle: compile 'com.jak ...