本人开了100个协程,每个协程调用这个httpPost方法,在这个方法里面初始化http客户端,本来以为是每个协程初始化一个http客户端,然后每一个请求都有一个超时的时间,后来发现并没有,这个超时时间竟然是累计的。
想问一下,如果每个http请求都设置一个超时时间该怎么做, httpPost函数代码如下
var v1 = make([]byte, 1)
c := http.Client{
Transport: &http.Transport{
Dial: func(netw, addr string) (net.Conn, error) {
c, err := net.DialTimeout(netw, addr, time.Millisecond*200 ) //设置建立连接超时
if err != nil {
return nil, err
}
deadline := time.Now().Add(2 * time.Second) //设置超时时间
c.SetDeadline(deadline)
return c, nil
},
},
}
form := url.Values{}
for k, v := range post_param{
form.Set(k, v)
}
b := strings.NewReader(form.Encode())
req, err := http.NewRequest("POST", post_url, b)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
res, err := c.Do(req)
if err != nil {
fmt.Println("httpPostForm 机器人请求失败: ",robot_num)
fmt.Println("httpPostForm 请求错误是:", err.Error())
//加锁
mutex.Lock()
defer mutex.Unlock()
fail++
return v1,false
}
defer res.Body.Close()
body,err:=ioutil.ReadAll(res.Body)
if err != nil{
fmt.Println("httpPostForm 机器人请求失败: ",robot_num)
fmt.Println("httpPostForm 请求错误是:", err.Error())
//加锁
mutex.Lock()
defer mutex.Unlock()
fail++
}
return body,true
更多评论