我有循环,我调用那个从osrm服务器获取响应的函数,经过一段时间ioutil.ReadAll(resp.Body)返回打印http2: server sent GOAWAY and closed the connection; LastStreamID=1999, ErrCode=NO_ERROR, debug=""
的错误
func RequestGET(req string) []byte {
reqst, err := http.NewRequest("GET", req, nil)
client := &http.Client{}
resp, err := client.Do(reqst)
if err != nil {
panic(err)
}
resp_data, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil {
fmt.Println(err)
}
return resp_data
}
不是resp.Body.Close()会关闭连接吗?我希望每次都能得到一个新的。
答案 0 :(得分:3)
服务器因某种原因正在关闭连接;后端关闭,超时等等。除了重试之外,没有什么可以做的,就像你有任何其他连接错误一样。关于自动重试这个问题,有一些关于相关问题(https://golang.org/issue/18639)的讨论,但它通常看起来像客户端正在按预期工作。
Response.Body.Close
不会关闭连接,否则会使用持久连接来破坏http1.1和http2的目的。读取和关闭响应主体是如何允许http客户端重用连接。