Lighttpd1.4.20源码分析之状态机(1)---状态机总览

前面讲了lighttpd的fdevent系统,从这一篇开始,我们将进入lighttpd的状态机。状态机可以说是lighttpd最核心的部分。lighttpd将一个连接在不同的时刻分成不同的状态,状态机则根据连接当前的状态,决定要对连接进行的处理以及下一步要进入的状态。下面这幅图描述了lighttpd的状态机:

时间: 2016-12-20

Lighttpd1.4.20源码分析之状态机(1)---状态机总览的相关文章

Lighttpd1.4.20源码分析之状态机(3)返回response

好久没顾这个了,最近比较清闲,重新拾掇一下,有始有终. 回到正题,前一篇介绍完了请求的处理,先面lighttpd将会把处理的结果返回给客户端.状态机进入CON_STATE_RESPONST_START.在这个状态中,服务器主要的工作在函数connection_handle_write_prepare.这个函数不算复杂,主要是根据客户端请求的method来设置response的headers,其实就是设置"Content-Length"的值.下面是函数代码,做了一些删减: 1 stati

Lighttpd1.4.20源码分析之状态机(4) 错误处理和连接关闭

Lighttpd所要处理的错误分为两种.一种是http协议规定的错误,如404错误.另一种就是服务器运行过程中的错误,如write错误. 对于http协议规定的错误,lighttpd返回相应的错误提示文件.其实对于lighttpd而言,这不算错误.在返回错误提示文件后,相当于顺利的完成了一次请求,只是结果和客户端想要的不一样而已. 对于服务器运行中的错误,状态机会直接进入CON_STATE_ERROR状态.大部分的情况下,这种错误都是由客户端提前断开连接所造成的.比如你不停的刷新页面,在你刷新的

Lighttpd1.4.20源码分析之状态机(2)---通过状态机看连接处理1

前面大概的介绍了一下lighttpd的状态机.在这篇中,将通过状态机,看看lighttpd到底是怎样处理 连接请求的. 在本篇中,我们只介绍lighttpd的最基本功能──处理静态页面.lighttpd处理静态页面要使用 mod_staticfile.c插件.从名字中也可以看出是用来处理静态文件的.另外这个插件在配置文件中没有配 置,是lighttpd默认会加载的. 首先还是把状态机放这,以便查阅.

lighttpd1.4.20源码分析 -工作模型

lighttpd的工作模型很简单──一个主进程加多个工作进程的多进程模型,也就是所谓的watcher-worker模型. 整个程序的入口(main函数)在server.c文件中.在main函数的开始部分必然是处理参数和各种繁杂的初始化工作.其中有两个地方要重点看一起.第一个是下面的语句: 1 if (test_config) //没有进行任何测试... 2 { 3 printf("Syntax OK\n"); 4 } 这个If语句是为了判断配置文件的语法是否合法.但是,明显,没有进行任

MapReduce源码分析之作业Job状态机解析(一)简介与正常流程浅析

        作业Job状态机维护了MapReduce作业的整个生命周期,即从提交到运行结束的整个过程.Job状态机被封装在JobImpl中,其主要包括14种状态和19种导致状态发生的事件.         作业Job的全部状态维护在类JobStateInternal中,如下所示: public enum JobStateInternal { // 作业新建状态,当作业Job被新创建时所处的状态 NEW, // 作业启动状态,此时运行时间已被设置,任务处于开始被调度阶段 SETUP, // 作

php源码分析之DZX1.5随机数函数random用法

  本文实例讲述了php源码分析之DZX1.5随机数函数random用法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <?php /** * @param int $length: 随机数长度 * @param int $numeric: 0或非0,其中0表示随机数由全数字组成,非0表示随机数由全字母组成 * @return string: 返回生成的随机数 */ function random($l

php源码分析之DZX1.5加密解密函数authcode用法

  本文实例讲述了php源码分析之DZX1.5加密解密函数authcode用法.分享给大家供大家参考.具体分析如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 <?php $authkey

php源码分析之DZX1.5字符串截断函数cutstr用法

  本文实例讲述了php源码分析之DZX1.5字符串截断函数cutstr用法.分享给大家供大家参考.具体分析如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 <?php /** * 函数来源DZX1.5,文件所在 /source/function/func

Spring AOP源码分析(八)SpringAOP要注意的地方

SpringAOP要注意的地方有很多,下面就举一个,之后想到了再列出来:  (1)SpringAOP对于最外层的函数只拦截public方法,不拦截protected和private方法,另外不会对最外层的public方法内部调用的其他方法也进行拦截,即只停留于代理对象所调用的方法.如下案例:  B类有两个public方法,foo1()和foo2(),foo1内部调用了foo2,简单如下:  ? 1 2 3 4 5 6 7 8 public void foo2() {          Syste