我正在使用http.RoundTripperGo 實現重試。這是一個實現示例。type retryableRoundTripper struct { tr http.RoundTripper maxRetryCount int}func (t *retryableRoundTripper) RoundTrip(req *http.Request) (resp *http.Response, err error) { for count := 0; count < t.maxRetryCount; count++ { log.Printf("retryableRoundTripper retry: %d\n", count+1) resp, err = t.tr.RoundTrip(req) if err != nil || resp.StatusCode != http.StatusTooManyRequests { return resp, err } } return resp, err}問題是否有必要讀取并關閉響應主體以重試 TCP 連接?func (t *retryableRoundTripper) RoundTrip(req *http.Request) (resp *http.Response, err error) { for count := 0; count < t.maxRetryCount; count++ { log.Printf("retryableRoundTripper retry: %d\n", count+1) resp, err = t.tr.RoundTrip(req) if err != nil || resp.StatusCode != http.StatusTooManyRequests { return resp, err } } // add io.Copy(ioutil.Discard, resp.Body) resp.Body.Close() return resp, err}作為旁注,我編寫了一個測試并確認重試按預期工作。(在 Go Playground 中,它超時,但它在本地工作。)https://play.golang.org/p/08YWV0kjaKr
是否有必要讀取并關閉響應主體以重試 TCP 連接?
慕的地6264312
2022-06-21 16:27:47