transport := &http.Transport{
        TLSClientConfig:     &tls.Config{InsecureSkipVerify: true}, // 不校验服务端证书
        MaxIdleConns:        100,
        MaxIdleConnsPerHost: 10,
        IdleConnTimeout:     time.Duration(10) * time.Second, // 连接空闲超时
    }
    client := &http.Client{
        Transport: transport,
        Timeout:   time.Duration(5) * time.Millisecond, // 请求超时
    }
###  https://blog.csdn.net/yimtcode/article/details/107778090
#  https://xujiahua.github.io/posts/20200723-golang-http-reuse/

MaxIdleConns  所有host的连接池最大连接数量,默认无穷大
MaxIdleConnsPerHost  每个host的连接池最大空闲连接数,默认2(控制单个Host的连接池大小)
MaxConnsPerHost 对每个host的最大连接数量,0表示不限制

func CreateHTTPClient() *http.Client {
    // 使用单例创建client
    once.Do(func() {
        client = &http.Client{
            Transport: &http.Transport{
                DialContext: (&net.Dialer{
                    Timeout:   30 * time.Second,
                    KeepAlive: 30 * time.Second,
                }).DialContext,
                MaxIdleConns:        0,              // 最大连接数,默认0无穷大
                MaxIdleConnsPerHost: 200,              // 对每个host的最大连接数量(MaxIdleConnsPerHost<=MaxIdleConns)
                IdleConnTimeout:     90 * time.Second, // 多长时间未使用自动关闭连接
            },
        }
    })

    return client
}


//不使用连接池
client:= &http.Client{
        Transport: &http.Transport{
            DialContext: (&net.Dialer{
                Timeout:   5 * time.Second,
                KeepAlive: 5 * time.Second,
            }).DialContext,
            TLSHandshakeTimeout:   5 * time.Second,
            ResponseHeaderTimeout: 5 * time.Second,
            ExpectContinueTimeout: 1 * time.Second,
            MaxIdleConnsPerHost: -1,
        },
}

goper
413 声望25 粉丝

go 后端开发