您的位置:首页 > 运维架构

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 查看评论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: