WebBench源码分析与心得
- 根据命令行参数中的请求方法种类,把"GET"、"HEAD"、"OPTIONS"或"TRACE"相应复制到 request[]。
- 在request中,接下来添加一个空格。
- 如果命令行参数url不包含"://",则它不是个有效的URL,报错、退出。
- 如果url长度超过1500个字符,则太长,退出。
- 如果url开头不是"http://",则报错。
- 如果没有设置代理,则
- 从url中取主机名和端口号,分别填至host和proxyport
- 取路径部分,添加至 request
- 如果使用HTTP 1.0 或 1.1,则将 " HTTP/1.0" 或 " HTTP/1.1" 添加至 request。(注意前导空格)
- 如果使用HTTP 0.9,则无需添加此协议部分。
- 换行:添加 "\r\n" 至 request
- 若HTTP版本在1.0及以上,则向request添加:"User-Agent: WebBench 1.5\r\n"。注意有换行。
- 若不使用代理,且版本在1.0以上,则向request添加主机头("Host: " + host)并换行。
- 若不使用代理,且强制刷新,则向request添加缓存控制(不缓存):"Pragma: no-cache\r\n"。
- 若版本在1.1及以上,则添加:"Connection: close\r\n"。
- 若版本在1.0及以上,则再添加空行:"\r\n"。
- 结束。■
- 检测目标服务器(URL中的host或者代理)是否可以连接:使用connect()。
- 创建一对管道:使用pipe()。
- 创建指定个数clients的子进程:使用fork()。
- 在子进程中:
- 调用 benchcore() 执行测试。
- 向管道写入三项数据:速度、失败次数、字节数。
- 结束。■
- 循环 clients次,反复执行:
- 从管道读入下一个子进程的三项数据:速度、失败次数、字节数。
- 若读入项数少于3,说明已无数据可读、或其余子进程已提前结束,跳出循环。
- 累计三项数据
- 打印统计结果:
- 速度:分两项
- 总请求数 / 时间 = (speed+failed)/,单位:次/分
- 总字节数 / 时间,单位:字节/秒
- 成功次数:speed
- 失败次数:failed
- 结束。■
- 使用SIGALRM安装定时器:时长来自命令行参数。
- 循环 直到定时器超时:
- 连接服务器(或代理服务器),得fd;若连接失败,则失败次数 failed 增1,跳至下一轮循环
- 向fd写入请求串;若写入失败,则 failed 增1,关闭fd,跳至下一轮循环
- 若采用HTTP/0.9协议,则停止发送:使用shutdown();
- 若要等服务器响应,则
- 反复从fd读出响应数据,直到读入0字节(表示读完),累计字节数至 bytes。
- 若出错,则 failed 增1,关闭fd,跳至下一轮循环
- 关闭fd。若出错,则 failed 增1。
- 累加成功次数 speed。
- 结束。■
/* fork children */
for (i = ; i < clients; i++) {
pid = fork();
if (pid <= (pid_t) ) {
/* child process or error*/
sleep(); /* make children faster */
break;
}
}
WebBench源码分析与心得的更多相关文章
- [软件测试]网站压测工具Webbench源码分析
一.我与webbench二三事 Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能.Webbench ...
- WebBench源码分析
源码分析共享地址:https://github.com/fivezh/WebBench 下载源码后编译源程序后即可执行: sudo make clean sudo make & make in ...
- 网站(Web)压测工具Webbench源码分析
一.我与webbench二三事 Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能.Webbench ...
- 基于python的ardrone control源码分析与心得
这里有一段python代码,可用于操控ardrone 2.0.实验室曾经借鉴用过,并添加了部分功能.如今复习一下,顺便理理python的相关知识点. #!/usr/bin/env python # A ...
- jQuery 源码分析和使用心得 - 序
众所周知, jQuery (个人简称为jq) 在前端开发中占有着非常重要的地位, 可以说jQuery的存在大大降低了学习网页设计和交互的门槛, 他的简单的语法和顺畅的使用逻辑激发了人们强烈的学习兴趣, ...
- [心得体会]SpringMVC源码分析
1. SpringMVC (1) springmvc 是什么? 前端控制器, 主要控制前端请求分配请求任务到service层获取数据后反馈到springmvc的view层进行包装返回给tomcat, ...
- [心得体会]spring事务源码分析
spring事务源码分析 1. 事务的初始化注册(从 @EnableTransactionManagement 开始) @Import(TransactionManagementConfigurati ...
- AngularJS 源码分析1
AngularJS简介 angularjs 是google出品的一款MVVM前端框架,包含一个精简的类jquery库,创新的开发了以指令的方式来组件化前端开发,可以去它的官网看看,请戳这里 再贴上一个 ...
- Tomcat源码分析
前言: 本文是我阅读了TOMCAT源码后的一些心得. 主要是讲解TOMCAT的系统框架, 以及启动流程.若有错漏之处,敬请批评指教! 建议: 毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, ...
随机推荐
- UITextView 显示不全的问题
//设置UITextView的内边距 textView.contentInset = UIEdgeInsetsMake(0, 0, 20, 0);
- myeclipse中如何导入mysql-connector-java-5.1.8-bin.jar【环境配置和工具使用】
前提:我建立了一个java project,工程名字为Test,现在需要连接mysql数据库,所以提前从网上将java操作mysql数据库的mysql-connector-java-5.1.8-bin ...
- codeforces 742E (二分图着色)
E. Arpa's overnight party and Mehrdad's silent entering Note that girls in Arpa's land are really at ...
- android数据存储之外部存储(External Storage)
Android设备支持外部存储器,可以是可移动存储器(如SD卡),也可以是内置在设备中的外部存储器(不可移动). 如果希望外部存储器上的文件只对本程序有用,并且当程序被卸载时目录中的文件自动被系统删除 ...
- 在 JQuery Mobile 中实现瀑布流图库布局
先来看在Windows系统的1080P显示器中显示的效果: 这个整合方式几乎没有现存的实例,是自己总结出来的方法,在此记录下来. 首先访问Masonry官网下载masonry.pkgd.min.js: ...
- 我总结的git命令指南。
git命令行指南 1.windows上安装git的网址:http://msysgit.github.com/. 没有安装过git的 这个网址里下mymsgit. 因为发现有些同学对git还不是那么熟悉 ...
- $anchorScroll和$cache
1.$achorScroll服务---用于描点跳转 $scope.change = function(id){ $location.hash(id); $anchorScroll(); }; 只要给l ...
- 漫谈Linux内核哈希表(2)
对照前面介绍过的内核通知链.链表,本章我们将要介绍的哈希表的初始化和定义也是如出一辙的: 点击(此处)折叠或打开 定义并初始化一个名为name的哈希链表表头 #define HLIST_HEAD(na ...
- Linux进程管理、任务管理
查看进程 Linux中的进程可以使用ps.pstree命令查看. 一般使用 ps aux (注意,没有短划线-:虽然加上不影响执行,只是会提示),还可以使用 ps -le,都是查看所有进程,区别在于显 ...
- Jquery常用radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关设置
获取一组radio被选中项的值:var item = $('input[name=items][checked]').val(); 获取select被选中项的文本:var item = $(" ...