03 2010 档案

摘要:前面讲了lighttpd的fdevent系统,从这一篇开始,我们将进入lighttpd的状态机。状态机可以说是lighttpd最核心的部分。lighttpd将一个连接在不同的时刻分成不同的状态,状态机则根据连接当前的状态,决定要对连接进行的处理以及下一步要进入的状态。下面这幅图描述了lighttpd的状态机:(在lighttpd源码文件夹中的doc目录中有个state.dot文件,通过dot命令可... 阅读全文
posted @ 2010-03-24 22:11 kernel@hcy 阅读(8396) 评论(1) 推荐(2) 编辑
摘要:前面讲了lighttpd是怎样使用fdevent系统的,以及监听socket的处理过程。这一篇我们来看一看lighttpd是怎样处理连接socket的。首先,我们来看看lighttpd是怎样建立和客户端的连接的。前面在讲监听socket的处理过程中其实已经讲解了连接的建立过程。lighttpd监测监听socket的IO事件,如果有可读事件发生,那么表示有新的连接请求,然后调用network.c/n... 阅读全文
posted @ 2010-03-22 21:57 kernel@hcy 阅读(5049) 评论(1) 推荐(0) 编辑
摘要:前面讲了lighttpd的fdevent系统的初始化过程。这篇要看一看lighttpd是怎样使用fdevent系统的。讲解的过程中,会详细的分析fdevent的源代码。首先还是从server.c的main函数入手。在程序的初始化过程中,当完成fdevent的初始化之后,第一个需要fdevent处理的事情就是将在初始化网络的过程中得到的监听fd(socket函数的返回值)注册的fdevent系统中。... 阅读全文
posted @ 2010-03-18 22:34 kernel@hcy 阅读(5185) 评论(1) 推荐(1) 编辑
摘要:前面讲了lighttpd的fdevents结构体以及fdevent系统的对外接口,这一篇将解析一下fdevent系统初始化。C程序在进行真正的编译之前都要进行预编译,那么,我们就先来看看fdevent系统中的一些宏。首先是fdevent.h开头的一些宏:[代码]通过上面的宏判断系统中是否有对应的多路IO系统,如果有,就定义对应的USE_XXX宏,用来方便后面程序的盘算。预编译完这些宏以后,对于当前... 阅读全文
posted @ 2010-03-17 21:31 kernel@hcy 阅读(4539) 评论(0) 推荐(1) 编辑
摘要:一、简介:伸展树,或者叫自适应查找树,是一种用于保存有序集合的简单高效的数据结构。伸展树实质上是一个二叉查找树。允许查找,插入,删除,删除最小,删除最大,分割,合并等许多操作,这些操作的时间复杂度为O(logN)。由于伸展树可以适应需求序列,因此他们的性能在实际应用中更优秀。伸展树支持所有的二叉树操作。伸展树不保证最坏情况下的时间复杂度为O(logN)。伸展树的时间复杂度边界是均摊的。尽管一个单独... 阅读全文
posted @ 2010-03-17 17:41 kernel@hcy 阅读(14021) 评论(7) 推荐(1) 编辑
摘要:前面讲了lighttpd的插件系统,这一篇将看一看lighttpd中的fdevent系统。fdevent系统主要是处理各种IO事件,在web服务器中,主要就是向socket写数据和从socket读数据。通常,web服务器是IO密集型程序,这就要求在数据的读写上,web服务器必须能够具有很好的性能,不会因为某个socket的阻塞而致使其他socket也被阻塞,否则会大大降低服务器的性能。因此,大部分... 阅读全文
posted @ 2010-03-17 17:30 kernel@hcy 阅读(6442) 评论(1) 推荐(1) 编辑
摘要:前面讲了lighttpd插件系统的加载和初始化,这一篇中,将介绍一下plugin.c中的宏PLUGIN_TO_SLOT。在将PLUGIN_TO_SLOT宏之前,我们先来看看lighttpd中插件系统的对外接口。这个接口所对的“外”指的是lighttpd服务器。前面已经提到,在运行的过程中,lighttpd不知道所加载的插件都是干什么用的,只知道这些插件所实现的接口,也就是在... 阅读全文
posted @ 2010-03-14 22:28 kernel@hcy 阅读(4048) 评论(0) 推荐(1) 编辑
摘要:前面讲了lighttpd插件系统的接口,下面我们来看看插件是怎么加载和初始化的。lighttpd的插件是以动态链接库的形式存在的。在服务器启动的时候,在初始化阶段将所有插件都加载进来。在server.c中的main函数中,加载插件是调用plugins_load函数:[代码]请读者注意一下这个函数调用的位置。这个函数是在服务器的初始化阶段进行调用的,并且该函数就在这调用了一次,其他地方没有再被调用过... 阅读全文
posted @ 2010-03-11 22:34 kernel@hcy 阅读(5797) 评论(3) 推荐(1) 编辑
摘要:在lighttpd中,使用插件的形式来增加服务的功能。同时,lighttpd提供了一个插件的公共接口给开发者,方便第三方提供额外的插件。Lighttpd的插件接口主要提供在plugin.h文件中。其中,plugin结构体是最核心的部分。plugin结构体的定义如下:[代码]可以看出,在结构体plugin的设计中,作者使用了面向对象的思想。plugin结构体就是一个虚基类,其中的数据成员,如name... 阅读全文
posted @ 2010-03-11 22:00 kernel@hcy 阅读(5795) 评论(2) 推荐(2) 编辑

点击右上角即可分享
微信分享提示