您的位置:首页 > 其它

17-23 Monkey源码分析

2017-03-07 19:01 183 查看

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



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指定类型与实际类型不一致
......
日志:

记录系统运行状态

帮助查找,排除错误

事后追踪,责任归属

考虑因素:

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

写哪些内容

日志保留多久

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

推荐使用日志类、日志库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: