Golang http传输中保活连接数达到MaxIdleConns会怎样
What happens if the number of keep-alive connections reaches MaxIdleConns in Golang http transport
我在使用 http.Transport 设置 http 客户端时遇到一些问题
假设我们有MaxIdleConns=10
,MaxIdleConnsPerHost=2
,五个不同的主机,每个主机都有两个保持连接,这意味着连接数达到MaxIdleConns
。
- 当需要一个目标主机可能是五台主机之一的新连接时,客户端会做什么?
- 当需要新的不同主机连接时,客户端会做什么?
顺便问一下,如果我有一个服务器使用 http.ListenAndServe
,如何配置它,比如什么时候关闭保持连接?如果有任何示例代码,我将不胜感激。
如果您使用默认的 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)
请参阅此 link 以获取更多详细信息,请参阅此 link https://medium.com/@nate510/don-t-use-go-s-default-http-client-4804cb19f779
我在使用 http.Transport 设置 http 客户端时遇到一些问题
假设我们有MaxIdleConns=10
,MaxIdleConnsPerHost=2
,五个不同的主机,每个主机都有两个保持连接,这意味着连接数达到MaxIdleConns
。
- 当需要一个目标主机可能是五台主机之一的新连接时,客户端会做什么?
- 当需要新的不同主机连接时,客户端会做什么?
顺便问一下,如果我有一个服务器使用 http.ListenAndServe
,如何配置它,比如什么时候关闭保持连接?如果有任何示例代码,我将不胜感激。
如果您使用默认的 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)
请参阅此 link 以获取更多详细信息,请参阅此 link https://medium.com/@nate510/don-t-use-go-s-default-http-client-4804cb19f779