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指定类型与实际类型不一致 |
... | ... |
记录系统运行状态
帮助查找,排除错误
事后追踪,责任归属
考虑因素:
哪些地方写日志(日志分级)
写哪些内容
日志保留多久
日志如何归档、备份、保存
推荐使用日志类、日志库
相关文章推荐
- 谷歌浏览器的源码分析(17)
- 谷歌浏览器的源码分析(23)
- Monkey源码分析之运行流程
- monkey源码分析之事件注入方法变化
- effective c++条款13-17 “以对象管理资源”之auto_ptr源码分析
- Monkey源码分析之事件注入
- 谷歌浏览器的源码分析(17)
- Monkey源码分析番外篇之Android注入事件的三种方法比较
- Monkey源码分析番外篇之WindowManager注入事件如何跳出进程间安全限制
- Monkey源码分析之运行流程
- 谷歌浏览器的源码分析(23)
- Leveldb源码分析--17
- nginx源码分析(17)-模块分析(3)
- Monkey源码分析番外篇之WindowManager注入事件如何跳出进程间安全限制
- Cocos2d-x学习笔记(17)(TestCpp源码分析-1)
- 谷歌浏览器的源码分析(23)
- g723源码详细分析-17-舒适噪声解码
- Hadoop源码分析17:IPC中的ThreadLocal
- 【android】Monkey源码分析、事件注入
- jQuery源码分析-17尺寸和大小 Dimensions & Offset