代码之家  ›  专栏  ›  技术社区  ›  白栋天

如果Golang http传输中keep-alive连接数达到maxidlecons,会发生什么情况

  •  -1
  • 白栋天  · 技术社区  · 6 年前

    假设我们有 MaxIdleConns=10 , MaxIdleConnsPerHost=2 MaxIdleConns .

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   MonkeyScript    6 年前

    如果您使用的是默认的Go-HTTP客户机,它将抛出一个错误 "too many open files error" 当您在高频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