开源库——Webbench的学习
2016-11-23 10:52
106 查看
Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码非常简洁,源码加起来不到600行。
首先,从主函数说起,以下是代码(为了使逻辑更加清晰,对main函数稍加整理了一下)int main(int argc, char* argv[]){//解析命令行参数if(parse_command(argc, argv) == -1)return 2;//解析url并创建请求头build_request(argv[optind]);//打印请求头信息dump_info(argv[optind]);//创建子进程并发送请求头return bench();}
由整理后的代码可以看出,整个webbench由4个步骤完成。
1.解析命令行参数,主要代码如下
while( (opt = getopt_long(argc, argv, "912Vfrt:p:c:?h", long_options, &options_index)) != EOF)
通过调用getopt_long来循环解析命令行参数,关于的getopt_long的用法,可以使用linux下man手册查看,或者点击文章最后关于getopt_long的博客链接查看。
2.解析url并创建请求头
在这一步中,首先获取请求的方法、URI、协议版本。然后根据命令行参数,添加User-Agent、Host、Pragma和Connection等头域。
3.打印请求头信息
打印的信息有Webbench的版权信息、请求的方法和url,创建的客户端的数量和运行的时间。
4.创建子进程并循环发送请求头
首先,主进程先测试连接是否成功。测试连接成功后,创建管道以便和子进程通信。接下来,创建子进程。创建完子进程后,就循环等待子进程发送信息,当运行时间结束后,打印测试结果。
子进程代码在benchcore中,首先,调用sigaction设置一个SIGALRM信号的捕获函数。然后设置一个闹钟,到达指定的的时间之后会发送SIGALRM信号。接下来,就是循环发送请求头,当运行时间结束后,跳出循环。
http://blog.chinaunix.net/uid-738944-id-3474852.html 关于getopt_long的用法
http://blog.csdn.net/mm2223/article/details/8089645/ 关于请求头的响应头
http://blog.csdn.net/beginning1126/article/details/8680757 关于sigaction
相关文章推荐
- c开源项目webbench学习
- 开源世界有许多优秀的开源项目,我选取其中十个最优秀的、最轻量级的C语言的项目,希望可以为C语言开发人员提供参考。 十个最值得阅读学习的C开源项目代码 1. Webbench 2. Tinyhttpd
- 开源控件SourceGrid学习-(附源代码)
- 几种开源SIP协议栈对比 [开始学习VoIP] 『转』
- 本站将陆续写一些开源系统的简介,希望给新人一些学习的指引
- 开源项目DataTierGenerator学习(三)
- 加入“开源GIS学习”团队
- 开源项目DataTierGenerator学习(四)
- 准备学习一个新的开源项目:Sinergia
- HTMLParser(一个比较流行的html代码解析、处理开源项目)学习,总结
- 开源项目DataTierGenerator学习(二)
- 微软已经提供了好几个开源的小项目供学习参考
- 做开源向雷锋同志学习-CowNew团队起航随感
- cownew开源-eclipse插件开发学习知识点笔记
- 权限学习--BlueDavy之技术Blog漫谈权限系统之结尾篇(开源产品、个人观点、知识体系)
- 做开源向雷锋同志学习-CowNew团队起航随感
- 推荐一个学习NHibernate的开源项目--Cuyahoga
- 最近开始关注Castle 开源项目,希望与大家共同学习共同进步。
- ETL学习笔记之四:开源项目 Kettle
- Visual Studio 2005学习的 开源项目 之NHibernate