如果在Golang http传输中保持连接的连接数达到MaxIdleConns,会发生什么情况

时间:2018-10-19 10:15:02

标签: http go tcp transport

使用http.Transport设置http客户端时我有一些疑问

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

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

顺便说一句,如果我有一台使用http.ListenAndServe的服务器,该如何配置它,例如何时关闭保持活动的连接?如果有任何示例代码,我将不胜感激。

1 个答案:

答案 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