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指定类型与实际类型不一致 |
... | ... |
日志:
记录系统运行状态
帮助查找,排除错误
事后追踪,责任归属
考虑因素:
哪些地方写日志(日志分级)
写哪些内容
日志保留多久
日志如何归档、备份、保存
推荐使用日志类、日志库