登录
首页 >  Golang >  Go问答

写入响应错误后关闭连接

来源:stackoverflow

时间:2024-03-16 08:00:34 196浏览 收藏

当 HTTP 响应被写入到已关闭的连接时,会出现“使用关闭的网络连接”错误。此错误通常在 `http.response.write` 函数被调用,并且响应已从连接中接收数据之后发生。例如,当一个请求被写入一个连接,然后使用 `bufio.NewReader` 从连接中读取响应时,如果在读取响应之前关闭连接,就会引发此错误。

问题内容

http.response.write 导致 '使用关闭的网络连接' 在关闭 net.conn 后出现错误,http.response 已从中接收数据。例如。我需要做这样的事情:

func Do(req *http.Request) *http.Response {
    // ...

    req.Write(conn)

    var r = bufio.NewReader(conn)
    var resp = http.ReadResponse(r, req)
    conn.Close()

    return resp
}

//...
var resp = Do(req)
resp.Write(anotherConn) // here is the error

但最后一行给出了上述错误。您可以说一个明显的解决方案是 resp.write 之后的 conn.close 但我喜欢这样做的原因是 do 必须将 req 写入它自己创建的 conn ,然后只返回 respzqbendcz qb。

唯一让我感兴趣的是 connreq 之间的关系。我认为响应将所有接收到的数据保存在 readresponse 中,然后不依赖于它从中接收数据的连接。但看起来并非如此。


解决方案


ReadResponse 读取状态行和标头,然后在 Respons.Body 中公开响应正文,它直接访问底层连接以动态读取正文,而不是将整个正文(可能有很多兆字节)加载到内存中。这使得实现尽可能高效,例如流式处理主体,而不是将其全部加载到内存中然后进行处理。

Per the docs

在读取正文字段时,响应正文将按需流式传输。如果网络连接失败或服务器终止响应,Body.Read 调用将返回错误。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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