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

标签 http go tcp transport

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

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

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

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

相关文章:

go - 从 protobuf 消息中获取枚举值

multithreading - sync.Mutex在并发Golang程序中是如何工作的

java - 在 Java 中使用内核绕过网络

c++ - 很难理解带有 async_read 和 async_write 的 Boost ASIO TCP 的一些概念

java - 执行其余代码后异步任务完成?

.net - https网站的优缺点?

php - 如何获取上传到 FTP 服务器的文件的 HTTP URL

json - Go:检测无效 JSON 字符串字符的最佳方法是什么?

python - gevent 中的服务器和同一应用程序中的其他 greenlets

http - 长时间运行的 http 连接永远不会得到响应