Webbench是一个在linux下使用的非常简单的命令行网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。
这个项目由纯C实现,使用linux系统调用。命令行参数如下:
项目地址:https://github.com/EZLippi/WebBench
由于C语言没有原生的HTTP包,需要用字符串实现HTTP协议,所以是非常麻烦的。另外还需要使用linux系统下的多进程以及管道。这些都是这个项目的难点。
如果直接用Go语言来写,会非常简单。因为Go语言这些都有现成的库。
项目整体流程
1.解析程序运行时的参数。
2.根据选择的http协议组装报文。
3.开始压力测试。
4.获取压力测试的结果。
1.解析程序运行时的参数
其实这就是传说中的argc argv[],不过程序在此处用到了C语言的getopt_long函数。想要了解如何解析Linux命令行参数,去查getopt_long这个函数
2.组包
HTTP请求协议包使用自己组包的方法,这也是C语言比较麻烦的地方。
3.压力测试
先检查服务器是否可以联通,随后创建供父进程和子进程通信的管道。
子进程根据配置发送报文,并且通过管道向父进程回报结果。
4.统计结果
这部分的代码比较简单,子进程通过管道来向父进程返回结果,用变量去统计结果即可。
fprintf(f,"%d %d %d\n",speed,failed,bytes);
fclose(f);
return 0;
结语
通过学习webbench的源码,我们也能从中了解到,原来压力测试也就是在短时间内建立大量的连接,计算与服务器通信的情况。 webbench用到的多进程,进程间通信,以及http协议,都是值得初学者去学习的。
来源:oschina
链接:https://my.oschina.net/u/4415254/blog/4311064