使用http.Transport设置http客户端时我有一些疑问
假设我们有MaxIdleConns=10
,MaxIdleConnsPerHost=2
,五个不同的主机,每个主机有两个保持活动的连接,这意味着连接数达到MaxIdleConns
。
顺便说一句,如果我有一台使用http.ListenAndServe
的服务器,该如何配置它,例如何时关闭保持活动的连接?如果有任何示例代码,我将不胜感激。
答案 0 :(得分:1)
如果使用默认的Go HTTP客户端,则在高频API调用期间达到最大连接限制时,它将引发错误"too many open files error"
。发生这种情况的原因是,默认的HTTP客户端一旦创建便不会关闭连接。为了解决此问题,您必须创建一个自定义HTTP客户端并设置超时间隔。
var netTransport = &http.Transport{
Dial: (&net.Dialer{
Timeout: 5 * time.Second,
}).Dial,
TLSHandshakeTimeout: 5 * time.Second,
}
var netClient = &http.Client{
Timeout: time.Second * 10,
Transport: netTransport,
}
response, _ := netClient.Get(url)
请参阅此链接以获取更多详细信息,请参考此链接https://medium.com/@nate510/don-t-use-go-s-default-http-client-4804cb19f779