项目概述
Webbench是用的标准C语言编写,仅仅只有500多行代码的轻量级压测软件。
用到的技术有:Linux提供的运行时参数解析,多进程,服务器通信,管道。
github地址:wenbbench
项目整体流程
1.解析程序运行时的参数。
2.根据选择的http协议组装 文。
3.开始压力测试。
4.获取压力测试的结果。
1.解析程序运行时的参数
其实这就是传说中的argc argv[],不过程序在此处用到了C语言的getopt_long函数。
当然,也会有对于输入的ip地址,端口 的解析和错误处理。
正常的webbench命令示例:webbench http://www.baidu.com/ 真的是少了一个斜杠都不行啊。
2.组包
程序提供了http0.9/1.0/1.1的协议选择,那么这三种协议到底有什么区别呢/p>
http0.9:只支持get方法。
http1.0:支持get,head,post方法。
http1.1:支持长连接,更完善的缓冲处理等等。
详细的解读:https://www.cnblogs.com/wupeixuan/p/8642100.html
http请求的含义:
出处:https://www.cnblogs.com/zyrhmh/p/8942995.html
调用这些请求的时候,只需要将相应的字符拼进去即可。
选择协议,也很简单,继续拼接。
还有大篇幅的对于不同http协议版本,运行参数的处理。
3.压力测试
先检查服务器是否可以联通,随后创建供父进程和子进程通信的管道。
子进程根据配置发送 文,并且通过管道向父进程回 结果。]
在子进程中,也会设置缓冲模式为无缓冲。因为并不需要等到服务器回应我们的消息,而这样设置还可以减少资源的消耗。
_IOFBF(满缓冲):当缓冲区为空时,从流读入数据。或者当缓冲区满时,向流写入数 据。
_IOLBF(行缓冲):每次从流中读入一行数据或向流中写入一行数据。
_IONBF(无缓冲):直接从流中读入数据或直接向流中写入数据,而没有缓冲区。
4.统计结果
这部分的代码比较简单,子进程通过管道来向父进程返回结果,用变量去统计结果即可。
结语
通过学习webbench的源码,我们也能从中了解到,原来压力测试也就是在短时间内建立大量的连接,计算与服务器通信的情况。
webbench用到的多进程,进程间通信,以及http协议,都是值得初学者去学习的。
文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8591 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!