關閉Go http.Client 的連線池
為了在測試時為每個HTTP/1.x 連線要求實作新的TCP 連線要求,停用Go 的HTTP 用戶端中的連線池機制至關重要。這可以透過修改與客戶端關聯的 HTTP 傳輸來完成。
一種方法是在傳輸中將DisableKeepAlives 設為true:
t := http.DefaultTransport.(*http.Transport).Clone() t.DisableKeepAlives = true c := &http.Client{Transport: t}
此選項明確禁用保持活動連接,強制客戶端為每個請求建立一個新的TCP 連接。但是,它可能會向請求添加 Connection: close 標頭。
或者,將MaxIdleConnsPerHost 設為負值可有效停用池化:
t := http.DefaultTransport.(*http.Transport).Clone() t.MaxIdleConnsPerHost = -1 c := &http.Client{Transport: t}
使用此選項,傳輸將永遠不會添加連接到池,確保為每個請求建立一個新連接。
建議建立一個新的傳輸來儲存這些設置,以保留預設傳輸配置。
將 Dialer.KeepAlive 設為 - 1 不會停用池,因為它主要控制活動連接的保持活動行為。與常見的假設相反,此選項不會影響建立的 TCP 連線數。
最後,將 IdleConnTimeout 設定為非常短的持續時間,例如 1 * 時間.奈秒,也可以幫助確保關閉空閒連線及時。但是,應謹慎使用此方法,以避免潛在的競爭條件。
以上是如何在 Go 的 http.Client 中停用新 TCP 連線的連線池?的詳細內容。更多資訊請關注PHP中文網其他相關文章!