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



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

日志:

记录系统运行状态

帮助查找,排除错误

事后追踪,责任归属


考虑因素:

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

写哪些内容

日志保留多久

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

推荐使用日志类、日志库

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值