首頁 >後端開發 >Golang >如何在 Go 的 http.Client 中停用新 TCP 連線的連線池?

如何在 Go 的 http.Client 中停用新 TCP 連線的連線池?

Patricia Arquette
Patricia Arquette原創
2024-11-07 17:17:03911瀏覽

How can I Disable Connection Pooling in Go's http.Client for Fresh TCP Connections?

關閉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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn