Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果Golang http传输中保持活动连接的数量达到MaxIdlecons,会发生什么情况_Http_Go_Tcp_Transport - Fatal编程技术网

如果Golang http传输中保持活动连接的数量达到MaxIdlecons,会发生什么情况

如果Golang http传输中保持活动连接的数量达到MaxIdlecons,会发生什么情况,http,go,tcp,transport,Http,Go,Tcp,Transport,在使用http.Transport设置http客户端时,我有一些问题 假设我们有MaxIdleConns=10,MaxIdleConnsPerHost=2,五个不同的主机,每个主机有两个保持活动连接,这意味着连接数达到maxidlecons 当需要一个目标主机可能是五台主机之一的新连接时,客户端将做什么 当需要新的不同主机连接时,客户端将做什么 顺便说一句,如果我有一台使用http.ListenAndServe的服务器,如何配置它,比如什么时候关闭保持实时连接?如果有任何示例代码,我将不胜感激。

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

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

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

  • 顺便说一句,如果我有一台使用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)
    

    有关更多详细信息,请参阅此链接。

    如果可能,客户端将重用空闲的保持连接。如果没有一个可以重复使用,并且达到了极限,它将关闭一个。您是否看到了其他行为或遇到了某种问题?我有许多保持活动连接,新请求总是失败,原因是“无法分配请求的地址”。这是通过共享http客户端来解决的。但是我对它的处理逻辑有一些疑问,顺便说一句,在源代码中,我没有发现如何设置golang http serverserver的配置非常有用:=&http.Server{Addr://Listen端口,Handler://Handler配置,ErrorLog://Logger配置,ReadTimeout:5*time.Second,WriteTimeout:10*time.Second,idlettimeout:15*time.Second,}server.ListenAndServe()