您的位置:首页 > 理论基础 > 计算机网络

lighttpd高性能Web服务器源码分析?坑爹啊,原来是light httpd!-0 -

2011-08-10 16:40 423 查看
最近刚打算学unix网络编程,所以做了点入门的准备后,就找了个轻量级的web服务器的源码来看,听网上介绍说lighttpd不错,所以我找了一下,把所谓的源码下了下来,研究了一下,最后发现哥玩的是light httpd(http://lhttpd.sourceforge.net/docs.html)不是lighttpd(http://www.lighttpd.net/),坑爹啊!!!尼玛怎么长那么像啊!!

所以下面说的全是light httpd的源码分析,要看lighttpd的同学就等我有空再贴文章吧。

(1)先看热闹

上 light httpd官方网址(http://lhttpd.sourceforge.net/docs.html)把该浏览的都浏览一遍,然后去sourceforge把源码下下来,在linux上解压后,按照http://lhttpd.sourceforge.net/docs.html 官方文档介绍,跑起服务器来,在浏览器上输入url确认服务运行成功。自己再试试放几个html文件到htdocs文件夹下然后访问访问也可以。

(2)后看门道

看玩热闹,开始看源码实现!

前些日子写过一个日志监控程序,要求用makefile来建立工程,那么很自然我就从源码文件的makefile入手,下面是我做的笔记



从上面的makefile我学到:

(1)makefile可以在编译时做一些编译控制

(2)尽量使用常量,方便修改

(3)一般的makefile需要我们执行 make , make install, make clean

make指令用来编译文件并生成目标文件

make install指令用来建立安装目录并存放程序资源(可执行文件,配置文件,脚本,资源等)

make clean指令用来清除已生成的obj文件

(4)light httpd web服务器的目录结构是这样的:

主目录(DESTDIR):可执行文件,错误页面,执行脚本

二级目录(htdocs):资源页面或者文件

二级目录(cgi-bin):cgi脚本

配置文件所在目录(/etc):服务器的配置文件

(5)最后注意要给每个文件和目录做权限控制

接下来当然是main.c的main函数(函数实体较长,这里不贴出来了):

(1)定义变量,初始化变量(包括默认host的基本信息)

(2)读取lhttpd.conf计算virtual host个数,并每个host的信息为分配内存空间

(3)readinconfig() 完成对lhttpd.conf的配置相关数据读取和变量赋值。

(4)创建并绑定监听socket

(5)使用fork子进程退出父进程的方式使得程序转为后台程序

(6)阻塞等待客户端连接,如果客户端连接成功,则fork子进程来处理通信(子进程会将一些从父进程继承来的没必要的东西销毁)

(7)借助fd_set和select来实现通信监控,一旦有通信信号被监控,执行serveconnection(new_fd)来做报文收发

erveconnection(new_fd)函数的分析:

(1)调用recv接收请求HTTP报文,并提取出关键字段(GET,目标资源,host)

(2)调用send发送HTTP响应报文

其他细节:

(1)使用系统日志

(2)做进程信号处理

(3)记录服务器进程号,方便使用脚本终止进程

(4)CGI模块

(5)多媒体资源请求响应

总的来说,light httpd(lhttpd)是一个比较简单的web服务器,并没有什么策略让它可以支持大量用户接入和大量请求响应,毕竟是一个很老很老的web 服务器,它短小精悍,代码写得挺不错,基本功能实现了同时也细心了考虑的一些可能出现的异常情况。

分析手记:lhttpd分析笔记.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: