gpt4 book ai didi

go - 如何捕获 "http: server closed idle connection"错误

转载 作者:数据小太阳 更新时间:2023-10-29 03:13:55 25 4
gpt4 key购买 nike

在我的 go 应用程序中,我收到以下错误:“http:服务器关闭空闲连接”。我想捕获它并在遇到它时重试我的 http 连接。

我发现这个错误来自“net/http”包,而且来自传输实现。特别是它定义了 here我把它包裹在 url.Error 中,但这就是我能找到的全部。你知道我怎样才能真正捕捉到这个错误吗?

编辑:我正在使用 elastic search client ,它又使用 net/http。我从客户端收到上述错误,并希望重试我的 Elasticsearch 请求,因为它是暂时的。现在我捕捉暂时性错误的方式是:

if urlErr, ok := err.(*url.Error); ok && (urlErr.Temporary() || urlErr.Err == io.EOF) {
return retryRequest()

}

最佳答案

net/http/transport.go 中的评论是这样说的(位于 here ):

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
}

如果 Go 发现非 nil http.Request.GetBody(找到 here),它将尝试重试请求,所以我认为它应该重试请求(或提供一个GetBody 函数)。

至于主要的错误原因,您可能需要检查服务器的保持事件功能,我的猜测是服务器正在过早地发送 TCP 连接重置(解释为 io.EOF)。您可能想尝试禁用 keep-alives 并查看是否有任何改变。

关于go - 如何捕获 "http: server closed idle connection"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42847294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com