17-23 Monkey源码分析

1. Monkey介绍

轻量级Web服务器:http://www.monkey-project.com/documentation/
小型、快速
开源项目
设计目标:主要针对嵌入式设备,硬件配置不高的情况下提供较高的性能
支持ARM、X86、X64处理器,能在多种Linux平台运行
多线程并发模式
安装要求:2.6.26或以上;pthreads库和libc库。

2. Monkey主流程

开始 --> 初始化 --> 创建监听socket --> 设置服务为Daumon进程 --> 系统时间初始化及时钟线程 --> Init thread keys 
--> 设置当前进程GID/UID --> 扩展插件初始化 --> 创建工作线程 --> 等待工作线程初始就绪 -- > 等待客户端请求(循环) --> 结束


初始化包括:信号量初始化;系统配置初始化;全局变量初始化;工作线程调度初始化;扩展插件初始化

1)根据以上流程查看代码,从main开始;
2)在线debug方式,熟悉代码
$./configure --trace	//添加编译选项,将debug信息打出来
$make clean
$make
$cd bin
$./monkey	//运行monkey可以看到很多trace信息

3. Monkey监听与请求处理

1)server_config结构体:记录HTTP_Server配置
2)plugin_api结构体:保存共享库函数(扩展插件)

4. Monkey Connection


5. Monkey 并发处理

6. Monkey Request


17-23 Monkey源码分析_第1张图片

7. Monkey HTTP协议解析模块


8. Monkey配置文件模块

9. Monkey Cache

10. Monkey错误处理及日志

良好的错误处理能提高软件质量,体现设计者的功力。

通过洗手间看公司管理水平,通过错误处理看软件质量。


错误类型分段:

0000 正确返回
1xxx 系统错误
2xxx 网络错误
3xxx 数据库错误
4xxx 参数错误
5xxx 业务错误
   

错误结构体:
struct err_t{
  int err_code;
  char *err_msg;
};

函数:
void set_err(int err_code,char *err_msg);
vid get_err(int err_code,struct err_t *);

有可能出错的地方合适的条件下都会出错;

无法预见所有错误和异常,但能圈定正确的范围;

错误程序能识别和处理;

所有正确之外的都有处理分支或流程;

统一、集中处理。


常见错误:

代码语法 if-else if 后不跟else,无法包含所有情况
case语句无default
while for无退出条件
内存错误 缓冲区溢出
未初始化
空指针、野指针
未释放、内存泄漏
数据库错误 连接、游标未释放
事务未正确提交
增、删、改、提交事务未判返回码
查询单行返回多行记录
表结构变更(数据库和程序不一致)
网络错误 连接未释放
超时处理不正确
异步通讯处理不正确
数据类型错误 不正确转换(大-->小)
浮点数精度偏差
printf,sprintf,fprintf指定类型与实际类型不一致
... ...

日志:

记录系统运行状态

帮助查找,排除错误

事后追踪,责任归属


考虑因素:

哪些地方写日志(日志分级)

写哪些内容

日志保留多久

日志如何归档、备份、保存

推荐使用日志类、日志库

你可能感兴趣的:(轻量级HTTP服务器)