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