3 回答
TA贡献1836条经验 获得超4个赞
在我看来,您可能遇到了此答案中描述的问题。基本上,Go http 客户端将尝试重用连接,除非您明确指出它不应该在Transport
您将Client
实例设置为使用或在请求本身中使用:
request.Close = true
当另一端的服务器关闭连接而没有Connection: close
在响应中使用标头指示时,这就会成为一个问题。该net.http
代码假定连接仍处于打开状态,因此下一个尝试使用该连接的请求会EOF
在另一次关闭连接时遇到。
您需要检查第 1000 个请求前后的连接发生了什么。接收服务器是否设置为限制每个客户端的连接数?您的代码是否遇到连接超时?在任何一种情况下,如果发生这种情况,服务器以 GoClient
代码无法预测的方式关闭了连接,那么您将遇到EOF
.
TA贡献1818条经验 获得超3个赞
首先,每次在循环
client := &http.Client{...
内实例化新客户端时要做什么DoCreate()
?客户端甚至可以同时重用,因此您可以更全局地构建它,在main()
我看来。然后对我来说,这样的错误看起来像是由 RoundTrip 产生的,所以通过连接,所以可能来自服务器站点。您可以使用模拟服务器进行测试吗?
最后,如果所有这些都无济于事,那么是的,某些系统对每个人都
net.Conn
希望拥有的打开的 FileDescriptor 的数量有限制。只有在操作系统级别才能消除此限制。
TA贡献1815条经验 获得超13个赞
EOF 通常来自未返回完整标头(包括两者CRLF
)的服务器,或者在标头完成之前连接已关闭。更有可能的是,您的服务器因并发请求而过载,但您仍应确保本地有足够的资源来满足您发出的并发请求的数量。如果num
足够大,你会用完一些东西。
尽管该错误并不是真正的描述性错误,但与任何其他请求错误相比,它没有什么可担心的。这是一个错误条件,并像处理任何其他人一样处理它。如果您想确切知道,您可能必须对导致EOF
.
- 3 回答
- 0 关注
- 1081 浏览
添加回答
举报