开源库——Webbench的学习

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

你可能感兴趣的:(webbench,源码,开源,linux,C/C++)