登录
首页 >  Golang >  Go问答

转到 http.Get、并发和“对等方重置连接”

来源:Golang技术栈

时间:2023-03-10 07:50:58 370浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《转到 http.Get、并发和“对等方重置连接”》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我有 1000-2000 个网页要从一台服务器下载,我正在使用 go 例程和通道来实现高效率。问题是每次我运行我的程序时,最多 400 个请求都会失败,并出现错误“对等方重置连接”。很少(可能 10 次中有 1 次)没有请求失败。

我能做些什么来防止这种情况发生?

有趣的一件事是,当我在与托管网站的服务器位于同一国家/地区的服务器上运行该程序时,0 个请求失败,所以我猜测延迟存在一些问题(因为它现在运行在服务器在不同的大陆)。

我使用的代码基本上只是一个简单的 http.Get(url) 请求,没有额外的参数或自定义客户端。

正确答案

该消息connection reset by peer表明远程服务器发送了一个RST强制关闭连接,或者是故意作为限制连接的机制,或者是由于缺乏资源。无论哪种方式,您都可能打开太多连接,或者重新连接太快。

并行启动 1000-2000 个连接很少是下载这么多页面的最有效方式,尤其是当大部分或全部来自单个服务器时。如果您测试吞吐量,您会发现最佳并发级别要低得多。

您还需要设置Transport.MaxIdleConnsPerHost以匹配您的并发级别。如果MaxIdleConnsPerHost低于预期的并发连接数,服务器连接通常会在请求后关闭,然后立即再次打开——这将显着减慢您的进度,并可能达到服务器施加的连接限制。

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《转到 http.Get、并发和“对等方重置连接”》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表