我可以从一台服务器上下载1000-2000个网页,并且我正在使用go例程和通道来实现高效率。问题是,每次我运行程序时,多达400个请求都会失败,并显示错误“对等重置连接”。很少(可能是10次中的1次),没有请求失败。
我该怎么做才能防止这种情况发生?
有趣的一件事是,当我在与托管该网站的服务器所在的国家/地区的服务器上运行该程序时,0个请求失败,因此我猜测延迟存在一些问题(因为它现在在另一大陆上的服务器)。
我使用的代码基本上只是一个简单的http.Get(url)请求,没有额外的参数或自定义客户端。
该消息connection reset by peer
表明远程服务器发送了一个RST
以强制关闭连接的方式,这是有意作为限制连接的机制,或者是由于资源不足而导致的。无论哪种方式,您都可能打开太多的连接,或者重新连接的速度太快。
并行启动1000-2000个连接很少是下载那么多页面的最有效方法,尤其是在大多数或全部来自单个服务器的情况下。如果测试吞吐量,您会发现一个较低的最佳并发级别。
您还需要将设置Transport.MaxIdleConnsPerHost
为与您的并发级别相匹配。如果MaxIdleConnsPerHost
低于预期的并发连接数,则服务器连接通常会在请求后关闭,而只能立即再次打开-这将大大减慢您的进度,并可能达到服务器施加的连接限制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句