在 for 循环中,我在一段时间后调用接受 osrm 服务器响应的函数。Readall (resp. Body)返回输出的 err: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() 关闭了连接? 我希望每次都有一个新的连接。
The server is closing the connection for some reason; the backend closed, timed out, etc. There's not much you can do except retry, just as if you had any other connection error. There is some discussion in a arelated issue (https://golang.org/issue/18639) about retrying this automatically, but it generally looks like the client is working as intended.
Response.Body.Close
does not close a connection, otherwise it would defeat the purpose of http1.1 and http2 using persistent connections. Reading and closing the response body is how you allow the connection to be reused by the http client.
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 }