在我的 go 应用程序中,我收到以下错误:“http:服务器关闭空闲连接”。如果遇到它,我想捕获它并重试我的 http 连接。
我发现这个错误来自“net/http”包,而且来自传输实现。特别是它在这里定义了
我把它包裹起来,url.Error但这就是我所能找到的。你知道我如何才能真正捕捉到这个错误吗?
编辑:我正在使用弹性搜索客户端,而后者又使用net/http. 从客户端,我收到了上述错误,并希望将我的弹性搜索请求作为临时请求重试。现在,我捕捉瞬态错误的方式是:
if urlErr, ok := err.(*url.Error); ok && (urlErr.Temporary() || urlErr.Err == io.EOF) {
return retryRequest()
}
Run Code Online (Sandbox Code Playgroud)
评论中net/http/transport.go这样说(位于此处):
if err == errServerClosedIdle {
// The server replied with io.EOF while we were trying to
// read the response. Probably an unfortunately keep-alive
// timeout, just as the client was writing a request.
return true
}
Run Code Online (Sandbox Code Playgroud)
如果 Go 发现一个非零值http.Request.GetBody(在这里找到),Go 将尝试重试该请求,所以我认为它应该重试该请求(或提供一个GetBody函数)。
至于主要的错误原因,您可能想要检查服务器的保持活动功能,我的猜测是服务器io.EOF过早地发送 TCP 连接重置(解释为)。您可能想尝试禁用 keep-alives 并查看是否有任何改变。
| 归档时间: |
|
| 查看次数: |
3287 次 |
| 最近记录: |