0. 名叫goablite
这是我自己取的名字
很简单,go语言实现,类似ab,用的IDE为Lite~~~
1. 设计思路
- 输入参数为总的请求数,并发数,以及CPU数,前面几篇说明了总请求数和并发数的区别,放在代码里,总请求数应该是
http.get(url)
的次数,并发数就是打开的协程(goroutine)的个数了,CPU数直接拿runtine.GOMAXPROP
就可以设置了; - 返回每秒的完成的HTTP连接数,那就是计时,然后除成功连接的请求数就行了;
这么看来的话,好像是超级简单哎。。。
想起了当时写SQL的感觉,对于简单的任务来说,是很简单,但是,一旦数据量上去了,就难了。这个也一样,对于最基本,最常规的情况来说,可能很简单,我连加锁,通道都没用。按道理,应该是要用协程和通道配合使用,才能保证代码的鲁棒性。
不管了,学完语言基础,也就剩2天时间,也不想直接拿别人的看懂就行,还是想参考别人的,做个自己的。
2. 源代码
纯代码就不花篇幅帖在这了,放个github传送门吧 xiaozhou的Github
3. 输入参数情况调试
在运行之前,先对一些可能出现的输入用例测试一下。随便想想,就可能包括以下几种吧:
- 输入参数数量不对的,一个参数都不输入或者超出参数个数;
- 输入的参数格式或者名称不正确;
- 只有url,没有其他参数的;
- 输入参数不常规,例如并发数比总请求数还大;
4. 运行对比
刚写完的程序,也可以跑的通,但问题是,不知道结果对不对啊,然后就拿ab和google大佬开发的那个工具,来一起对比一下。
就拿CSDN的主页作为测试目标,测试命令为
ab -n 200 -c 20 http://www.csdn.net/index.html
- ab的测试结果
- hey的测试结果
- goablite的测试结果
不要看我只取了三个个例,我是对不同的参数和不同的网址进行了测试以后,得到的这三个代表。
如果只看RPS的话,那么基本情况就是这样,hey的值一般要比ab地很多,goablite的值要比ab高一些。对于ab我是很坚信的,对于hey我ij觉得应该也挺靠谱的,可这样的结果,让我有点为难啊。。。
5. 运行容错调试
在运行方面,应该还有很多需要调试的地方,比如
- 内存泄漏,在这个初期demo中还没使用Channel,不然很可能会因为堵塞造成泄漏;
- 加锁,和Channel一样,也还没加,如果这个工具还有二期的话,这些我都再加上。
6. 代码优化和重构
这一步还早的很。。。