Go-Resty Transport
优化思路¶
resty\transport.go¶
resty.New() 在创建客户端是 http.Transport 的默认配置相关
func createTransport(localAddr net.Addr) *http.Transport {
dialer := &net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}
if localAddr != nil {
dialer.LocalAddr = localAddr
}
// 返回 &http.Transport 结构体
return &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: dialer.DialContext,
ForceAttemptHTTP2: true,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
MaxIdleConnsPerHost: runtime.GOMAXPROCS(0) + 1,
}
}
http\transport.go¶
-
创建了一个名为
clientConfig
的HTTP客户端配置 -
clientConfig := &http.Client{}
:创建一个空的HTTP客户端配置对象,其中&
表示取该对象的地址 -
Transport: &http.Transport{}
:在客户端配置中创建一个传输层对象,该对象用于定义HTTP请求的传输选项 -
MaxConnsPerHost: nil
:设置在传输层对象中每个主机允许的最大连接数
优化代码¶
NewWithClient()¶
使用resty.NewWithClient()
传入自定义的&http.Client
SetTransport()¶
使用SetTransport()
设置MaxConnsPerHost