Golang http传输中保活连接数达到MaxIdleConns会怎样

What happens if the number of keep-alive connections reaches MaxIdleConns in Golang http transport

我在使用 http.Transport 设置 http 客户端时遇到一些问题

假设我们有MaxIdleConns=10MaxIdleConnsPerHost=2,五个不同的主机,每个主机都有两个保持连接,这意味着连接数达到MaxIdleConns

  1. 当需要一个目标主机可能是五台主机之一的新连接时,客户端会做什么?
  2. 当需要新的不同主机连接时,客户端会做什么?

顺便问一下,如果我有一个服务器使用 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