实现简单的http并发请求,支持:GET、POST、HEAD、PUT

package main

import (
	"flag"
	"fmt"
	"io/ioutil"
	"net/http"
	"sync/atomic"
	"time"
)

func main() {
	connection := flag.Int("c", 200, "-c N")
	timeout := flag.Int("o", 5, "-o N")
	timeover := flag.Int("t", 5, "-t N")
	printresult := flag.Bool("p", false, "-p false")
	method := flag.String("m", "GET", "-m GET")
	url := flag.String("u", "http://127.0.0.1", "-u http://127.0.0.1")
	flag.Parse()
	var Count int32
	defer func() {
		if !*printresult {
			fmt.Println("成功响应:", Count)
		}
	}()
	T := time.Tick(time.Duration(*timeover) * time.Second)
	var result chan string = make(chan string, 10)
	t := time.Duration(*timeout) * time.Second
	Client := http.Client{Timeout: t}
	for i := 0; i < *connection; i++ {
		go func() {
			req, _ := http.NewRequest(*method, *url, nil)
			resp, _ := Client.Do(req)
			defer resp.Body.Close()
			if resp.StatusCode == 200 {
				b, _ := ioutil.ReadAll(resp.Body)
				result <- string(b)
				atomic.AddInt32(&Count, int32(1))
			}
		}()
	}
	for {
		select {
		case x := <-result:
			if *printresult {
				fmt.Print(x)
			}
		case <-T:
			return
		}
	}
}

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-08-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

用golang写的golang解析json数据的包

gojson是快速解析json数据的一个golang包,你使用它可以快速的查找json内的数据 安装 go get github.com/widuu/gojs...

370110
来自专栏技术之路

wpf listBox 多列大图片效果

修改ListBox的模版 多列大图片效果,加上删除button 看图 ? 上代码! <Window x:Class="Thunder.SetCenter.Roo...

53370
来自专栏小特工作室

基于JQuery EasyUI的WebMVC控件封装(含源码)

  JQuery EasyUI类库,大家不会陌生,出来已经有很多年了。个人感觉还是很好用的,作者更新频率也很快,bug也及时修复。   最近在整理以前的代码,找...

376100
来自专栏博客园

WPF Binding学习(四) 绑定各种数据源

在这里我们使用了ListView控件和GridView控件来显示数据,这两个控件从表面来看应该属于同一级别的控件。实际上并非如此!ListView是ListBo...

30130
来自专栏Java与Android技术栈

Java8新的异步编程方式 CompletableFuture(三)

前面两篇文章已经整理了CompletableFuture大部分的特性,本文会整理完CompletableFuture余下的特性,以及将它跟RxJava进行比较。

15110
来自专栏Java成神之路

Java钉钉开发_03_通讯录管理之 人员管理 和 部门管理

33220
来自专栏菩提树下的杨过

WebService又一个不爽的地方

昨天在做项目时,发现了WebService又一个不人性化的地方,记录于此,希望能帮到遇到类似问题的同学们。 很多大型b/s项目,通常会分成几层,为了重现问题,这...

24080
来自专栏hbbliyong

C#基础知识回顾-- 反射(4)

从程序集获得类型   先说点题外话,现在技术真的发展太快了。我这边还很多东西半生不熟 呢,那边又出现了好多有趣的新东西让你眼红不已。学还是不学这还真是 个问题。...

29460
来自专栏逸鹏说道

Z.ExtensionMethods 一个强大的开源扩展库

今天有意的在博客园里面搜索了一下 Z.ExtensionMethods 这个扩展类库,确发现只搜到跟这个真正相关的才两篇博文而已,我都点进去看了一下,也都只是提...

32060
来自专栏张善友的专栏

ASP.NET MVC Preview生命周期分析

做ASP.NET WebForm开发都知道,ASP.NET有复杂的生命周期,学习ASP.NET MVC就要深入理解它的生命周期。今天从CodePlex上下载了A...

22870

扫码关注云+社区

领取腾讯云代金券