我试图测量URL的连续加载时间,但无法删除http连接并从每次测量开始重新开始。有了这个代码...golang - 似乎无法删除http连接
func getloadtime (url string) float64 {
// setup client
tr := &http.Transport{
DisableKeepAlives: true}
client := &http.Client{Transport:tr}
// page load and measure
start := time.Now()
_, _ = client.Get(url)
return(time.Since(start).Seconds())
}
func main() {
for i := 0; i < 5; i++ {
fmt.Println(getloadtime("http://www.google.com"))
}
}
我得到的测量是这样的:
2.75
0.13
0.09
0.12
0.115
所以它出现在HTTP连接正在从最初的负荷维持,因为后续加载速度更快。我也尝试在标题中将“连接”设置为“关闭”,但得到相同的结果:
req, err := http.NewRequest("GET", url, nil)
req.Header.Set("Connection", "close")
_, _ := client.Do(req)
我在做什么错?
连接你不是衡量你认为你是。您的第一个示例不仅每次都会打开一个新连接,但它在返回后会泄漏连接。永远不要丢弃'http.Transport',否则你会泄漏连接。你试图解决的实际问题是什么? – JimB
我试图从压力测试的目的页面加载(这是一个简化的版本 - 最终将来自多个进程)获得一致的结果,所以我试图模拟/创建一个新的连接每次(并关闭它正确)。很明显,循环内的页面负载测量#2-#5正在维护中。我假设它使用相同的连接...但不能说。 –
它不可能使用相同的连接,因为您每次都使用新的传输。我猜想这是你的解析器缓存产生差异。而不是猜测,检查正在建立的实际连接。还有'Request.Close'字段自动设置标题。 – JimB