3 回答
TA贡献1878条经验 获得超4个赞
该消息connection reset by peer
表明远程服务器发送了一个RST
强制关闭连接,或者是故意作为限制连接的机制,或者是由于缺乏资源。无论哪种方式,您都可能打开太多连接,或者重新连接太快。
并行启动 1000-2000 个连接很少是下载这么多页面的最有效方式,尤其是当大部分或全部来自单个服务器时。如果您测试吞吐量,您会发现最佳并发级别要低得多。
您还需要设置Transport.MaxIdleConnsPerHost
以匹配您的并发级别。如果MaxIdleConnsPerHost
低于预期的并发连接数,服务器连接通常会在请求后关闭,然后立即再次打开——这将显着减慢您的进度,并可能达到服务器施加的连接限制。
TA贡献1802条经验 获得超5个赞
仍然是一个golang新手,希望这会有所帮助。
var netClient = &http.Client{}
func init() {
tr := &http.Transport{
MaxIdleConns: 20,
MaxIdleConnsPerHost: 20,
}
netClient = &http.Client{Transport: tr}
}
func foo() {
resp, err := netClient.Get("http://www.example.com/")
}
TA贡献1810条经验 获得超5个赞
MaxConnsPerHost通过设置运输选项,我得到了很好的结果......
cl := &http.Client{
Transport: &http.Transport{MaxConnsPerHost: 50}
}
MaxConnsPerHost 可以选择限制每个主机的连接总数,包括处于拨号、活动和空闲状态的连接。违反限制时,拨号将阻塞。
https://golang.org/pkg/net/http/#Transport.MaxConnsPerHost
编辑:为了澄清,这个选项是在 Go 1.11 中发布的,在上面@AG1 或@JimB 的答案时不可用,因此我发布了这个。
- 3 回答
- 0 关注
- 179 浏览
添加回答
举报