go-http的DialContext KeepAlive和Transport IdleTimeout的区别.客户


client := &http.Client{
Transport: &http.Transport{
DialContext: (&net.Dialer{
KeepAlive: 5 * time.Second,
}).DialContext,
IdleConnTimeout: 3 * time.Second,
},
}

KeepAlive和IdleConnTimeout之间有什么区别?

他们中的哪一个到底做什么?

来自文档:

https://github.com/golang/go/blob/go1.13.8/src/net/dial.go#L72

KeepAlive指定活动网络连接的保持活动探测之间的间隔。如果为零,则如果协议和操作系统支持,则使用默认值(当前为15秒)发送保活探测。不支持保持活动的网络协议或操作系统会忽略此字段。如果为阴性,则禁用保活探针。

因此,如果将KeepAlive设置为大于0,它将表示从下一个探测开始所经过的时间,以便了解网络连接是否仍处于活动状态。

从另一侧,IdleConnTimeout:
https://github.com/golang/go/blob/go1.13.8/src/net/dial.go#L72

IdleConnTimeout是空闲(保持活动)连接在关闭之前保持空闲的最长时间。零意味着没有限制。

因此,如果将IdleConnTimeout设置为大于0,则表示连接仍然打开的时间。

最新更新