删除主机名HTTP客户端DNS缓存并关闭与特定IP的连接
我正在使用删除主机名HTTP客户端DNS缓存并关闭与特定IP的连接,http,go,dns,Http,Go,Dns,我正在使用net/http库发出http请求 我有一个用例,有时我解析一个面向Amazon CloudFront发行版的域名。有时出于自身原因,CloudFront会将DNS解析到另一个大陆上的存在点(POP),导致非常高的延迟 当这种情况发生时,我希望引起“目标重置”,使我的http.Client忘记该POP,基本上关闭打开的TCP连接并强制重新解析该主机名的DNS 我找不到一种方法来强制这个“目标重置”。我的选择似乎是: 使用关闭http.Transport中的所有空闲连接,但这将关闭所有T
net/http
库发出http请求
我有一个用例,有时我解析一个面向Amazon CloudFront发行版的域名。有时出于自身原因,CloudFront会将DNS解析到另一个大陆上的存在点(POP),导致非常高的延迟
当这种情况发生时,我希望引起“目标重置”,使我的http.Client
忘记该POP,基本上关闭打开的TCP连接并强制重新解析该主机名的DNS
我找不到一种方法来强制这个“目标重置”。我的选择似乎是:
http.Transport
中的所有空闲连接,但这将关闭所有TCP连接,并且不会对缓存的DNS结果执行任何操作http.Client
。我已经确认这确实会导致重新进行DNS查找,并且还会创建一个新的连接池。缺点是它会强制重新解析所有其他DNS,并强制关闭所有其他TCP连接,即使是我喜欢的连接有没有一种方法可以实现我所描述的“目标重置”(特定主机名的DNS,特定IP地址的TCP连接)?我很乐意使用反射并在某种程度上向下遍历到
http.Client
实现中。为什么选项2会强制关闭所有其他连接?@HymnsForDisco,因为连接池在客户端中,所以替换客户端会替换池,从而替换那些池中的连接。@HymnsForDisco,是的,正是@Adrian说的。新的http.Client
基本上只是启动一个新池。大概还有一个DNS缓存。