client := &http.Client{
Transport: &http.Transport{
DialContext: (&net.Dialer{
KeepAlive: 5 * time.Second,
}).DialContext,
IdleConnTimeout: 3 * time.Second,
},
}
KeepAlive和IdleConnTimeout之间有什么区别?
他们中的哪一个究竟做了什么?
答案 0 :(得分:1)
从文档中:
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,则表示连接仍处于打开状态的时间。