经典C语言项目Webbench详解

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协议,都是值得初学者去学习的。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值