我在使用 http.Transport 设置 http 客户端时遇到了一些问题
假设我们有MaxIdleConns=10
,MaxIdleConnsPerHost=2
,五个不同的主机,每个主机有两个保活连接,这意味着连接数达到MaxIdleConns
。
- 当需要一个目标主机可能是五台主机之一的新连接时,客户端会做什么?
- 当需要新的不同主机连接时,客户端会做什么?
顺便说一句,如果我有一个服务器使用http.ListenAndServe
,如何配置它,比如什么时候关闭保持连接?如果有任何示例代码,我将不胜感激。
最佳答案
如果您使用默认的 Go HTTP 客户端,当您在高频 API 调用期间达到最大连接限制时,它将抛出错误 “太多打开的文件错误”
。发生这种情况是因为默认的 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
关于http - Golang http传输中保活连接数达到MaxIdleConns会怎样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52890348/