Mathopd源码分析——概述
2008-12-21 19:32
197 查看
分析源码的第一步便是要弄清整个系统设计结构,模块组成。
系统设计
Mathopd是一个单进程单线程的HTTP服务器程序。单进程单线的构建决定了其简单的设计结构。系统采用的是select多路复用,来处理并发连接。现在的Linux2.6内核支持epoll,它比select更高效。作者可能最初在2.4内核上开发,或是想保持和2.4内核的兼容性而采用了select。但作者对select进行了封装(参见poll-emul.c文件),使接口用起来像poll,这个封装方便了接口的使用。
Mathopd系统维护了4种连接队列,分别表示连接的4中不同状态,分别是:
free_connections: 空闲连接队列
waiting_connections: 等待连接队列
reading_connections: 读连接队列
writing_connections: 写连接队列
一个连接发起HTTP请求,其状态在请求的生命周期内不断变化。个人认为,Mathopd设计的如此简洁,这4种连接队列的设计功不可没。在以后的文章中我将着重分析这4种连接队列。状态的变化调用set_connection_state函数,可将一个连接对象从一个状态队列移动到另一个状态队列。
模块组成
Mathopd可分为如下几个模块:
1. 核心模块 : 主要是维护上面提到的4种状态队列,并负责数据的收发;
2. 请求模块 : 分析并处理客户端的请求;这个模块最复杂;
3. 配置模块 : 这个模块很重要,主要是读取文件的配置信息,对系统进行配置。作者的这个模块设计的很好,用了编译原理中词法分析的自动状态机的思想,以后会详细分析此模块。
4. 日志模块 : 用来记录系统运行日志。
5. CGI模块 : 用来处理CGI脚本
6. Util模块 : 最简单,一些实用的函数集。
接下来的文章将介绍Mathopd服务器的启动过程。它为你设计Linux下服务器程序的启动提过了蓝本。 阅读全文
类别:Mathopd 查看评论
系统设计
Mathopd是一个单进程单线程的HTTP服务器程序。单进程单线的构建决定了其简单的设计结构。系统采用的是select多路复用,来处理并发连接。现在的Linux2.6内核支持epoll,它比select更高效。作者可能最初在2.4内核上开发,或是想保持和2.4内核的兼容性而采用了select。但作者对select进行了封装(参见poll-emul.c文件),使接口用起来像poll,这个封装方便了接口的使用。
Mathopd系统维护了4种连接队列,分别表示连接的4中不同状态,分别是:
free_connections: 空闲连接队列
waiting_connections: 等待连接队列
reading_connections: 读连接队列
writing_connections: 写连接队列
一个连接发起HTTP请求,其状态在请求的生命周期内不断变化。个人认为,Mathopd设计的如此简洁,这4种连接队列的设计功不可没。在以后的文章中我将着重分析这4种连接队列。状态的变化调用set_connection_state函数,可将一个连接对象从一个状态队列移动到另一个状态队列。
模块组成
Mathopd可分为如下几个模块:
1. 核心模块 : 主要是维护上面提到的4种状态队列,并负责数据的收发;
2. 请求模块 : 分析并处理客户端的请求;这个模块最复杂;
3. 配置模块 : 这个模块很重要,主要是读取文件的配置信息,对系统进行配置。作者的这个模块设计的很好,用了编译原理中词法分析的自动状态机的思想,以后会详细分析此模块。
4. 日志模块 : 用来记录系统运行日志。
5. CGI模块 : 用来处理CGI脚本
6. Util模块 : 最简单,一些实用的函数集。
接下来的文章将介绍Mathopd服务器的启动过程。它为你设计Linux下服务器程序的启动提过了蓝本。 阅读全文
类别:Mathopd 查看评论
相关文章推荐
- mongodb2.2源码分析(一)概述
- HDFS源码分析一-概述
- Android 短信模块分析(一) Mms功能概述及源码目录结构分析
- 【Tomcat9源码分析】组件与框架概述
- zookeeper3.3.3源码分析(一)工作原理概述
- linux内存源码分析 - SLUB分配器概述
- 安卓图表引擎AChartEngine(二) - 示例源码概述和分析
- jdk的Selector源码分析(一)Selector概述
- mybatis源码分析(2)——事务概述
- 【Tomcat9源码分析】生命周期、启动、停止概述
- 【计算机视觉】OpenCV人脸识别facerec源码分析2——LBPH概述
- 安卓图表引擎AChartEngine(二) - 示例源码概述和分析
- linux内存源码分析 - SLAB分配器概述
- linux内存源码分析 - SLAB分配器概述【转】
- jQuery源码分析-10事件处理-Event-概述和基础知识
- linux内存管理源码分析 - 概述
- linux调度器源码分析 - 概述(一)
- Velocity源码分析(一)――概述
- 安卓图表引擎AChartEngine(二) - 示例源码概述和分析
- Contacts源码分析(一、概述)