美文网首页
golang http client keep-alive最大连

golang http client keep-alive最大连

作者: 李二狗2000 | 来源:发表于2018-03-14 16:48 被阅读0次
  • 测试代码(默认MaxIdleConns=100, MaxIdleConnsPerHost=2)

 package main

import (

    "io"

    "io/ioutil"

    "net/http"

    "time"

)

func worker(client *http.Client) {

    resp, _ := client.Get("[http://www.qq.com/"](http://192.168.31.1/%22);)

    io.Copy(ioutil.Discard, resp.Body)

    defer resp.Body.Close()

}

func worker2(client *http.Client) {

    resp, _ := client.Get("[http://httpbin.org/get"](http://httpbin.org/get%22);)

    io.Copy(ioutil.Discard, resp.Body)  //必须读取Body并且关闭,否者不会被复用

    defer resp.Body.Close() 

}

func main() {

    tr := &http.Transport{

        MaxIdleConns: 100,

        MaxIdleConnsPerHost: 2,

    }

    client := &http.Client{

        Transport: tr,

    }

    worker(client)

    time.Sleep(time.Second * 1)

    worker(client)

    time.Sleep(time.Second * 1)

    worker2(client)

    time.Sleep(time.Second * 1)

    worker(client)

    time.Sleep(time.Second * 1)

}
  • 设置MaxIdleConns=MaxIdleConnsPerHost=1

  1. Client第一次请求,源端口是55564


    image.png
  2. Client第二次请求,源端口是55564


    image.png
  3. Client第三次请求,源端口是55556


    image.png
  4. Client第四次请求,源端口是55568


    image.png

Client前两个请求对同一个host发起,复用了55564接口的链接,第三次请求对另外一个HOST发起,由于MaxIdleConns=1,会关闭前一个链接然后发起一个新的链接,第四次同样也会关闭第三次的链接,重新发起。说明MaxIdleConns限制了最大keep-alive的连接数,超出的连接会被关闭掉。

  • 设置MaxIdleConns=2 MaxIdleConnsPerHost=1

  1. Client第一次请求,源端口是55680


    image.png
  2. Client第二次请求,源端口是55680


    image.png
  3. Client第三次请求,源端口是55681


    image.png
  4. Client 第四次请求,源端口是55680


    image.png

Client对不同的两个Host发起的请求,都复用了连接

相关文章

网友评论

      本文标题:golang http client keep-alive最大连

      本文链接:https://www.haomeiwen.com/subject/lnnfqftx.html