http client 短链接复用(变为长连接)
生活随笔
收集整理的這篇文章主要介紹了
http client 短链接复用(变为长连接)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
背景:
?
? go在做服務(wù)之間調(diào)用時(shí)http client會(huì)消費(fèi)系統(tǒng)的tcp資源(大量并發(fā)會(huì)耗費(fèi)掉系統(tǒng)資源,資源有限),故此需要復(fù)用
?
1.復(fù)用
?
func HttpPostJson(client *http.Client, url string, jsonstr string) (bool, error) {var request *http.RequestbytesData := []byte(jsonstr)reader := bytes.NewReader(bytesData)request, err = http.NewRequest("POST", url, reader)if err != nil {httpLog.Println(err)return false, err}request.Header.Set("Content-Type", "application/json;charset=UTF-8")response, err := client.Do(request)if err != nil {httpLog.Println(err)return false, err}if response.StatusCode != 200 {httpLog.Println("http resp code=", response.StatusCode, err)reqResult, err := ioutil.ReadAll(response.Body)if err != nil {httpLog.Println(err)return false, nil}httpLog.Println(reqResult)return false, nil}//這塊關(guān)閉才能復(fù)用,循環(huán)調(diào)用即可復(fù)用,不要關(guān)閉client response.Body.Close()return true, nil }?
?
也可以建立連接池
const (IdleConnTimeout int = 90 )var (DefaultTransport *http.Transport = &http.Transport{Proxy: http.ProxyFromEnvironment,DialContext: (&net.Dialer{Timeout: 60 * time.Second,KeepAlive: 60 * time.Second,}).DialContext,MaxIdleConns: int(512), //不能使用參數(shù)變量,否則初始化不上MaxIdleConnsPerHost: int(512),IdleConnTimeout: time.Duration(IdleConnTimeout)* time.Second, } )func createHTTPClient() *http.Client {client := &http.Client{Transport:DefaultTransport,Timeout: 60 * time.Second,}return client }?
?
?
總結(jié)
以上是生活随笔為你收集整理的http client 短链接复用(变为长连接)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔记本电脑系统怎么重装,笔记本重装系统
- 下一篇: android配置网络权限管理,Andr