我有1000-2000个网页需要从一台服务器下载,并且我使用go例程和通道来实现高效率。问题是,每次我运行程序时,最多 400 个请求会失败,并出现错误“连接被对等方重置”。很少(可能十分之一),没有请求失败。
我可以做什么来防止这种情况发生?
一件有趣的事情是,当我在与网站托管服务器位于同一国家/地区的服务器上运行此程序时,0 个请求失败,所以我猜测存在一些延迟问题(因为它现在运行在服务器位于不同大陆)。
我使用的代码基本上只是一个简单的 http.Get(url) 请求,没有额外的参数或自定义客户端。
消息connection reset by peer
表示远程服务器发送了一个RST
强制关闭连接,无论是故意作为限制连接的机制,还是由于缺乏资源。无论哪种方式,您都可能打开太多连接,或者重新连接太快。
并行启动 1000-2000 个连接很少是下载如此多页面的最有效方法,尤其是当大多数或全部来自单个服务器时。如果您测试吞吐量,您会发现最佳并发级别要低得多。
您还需要设置Transport.MaxIdleConnsPerHost
以匹配您的并发级别。如果MaxIdleConnsPerHost
低于预期的并发连接数,服务器连接通常会在请求后关闭,然后立即再次打开 - 这将显着减慢您的进度,并可能达到服务器施加的连接限制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)