首頁 > 後端開發 > Golang > 如何有效停用 Go 的 http.Client 連線池?

如何有效停用 Go 的 http.Client 連線池?

Barbara Streisand
發布: 2024-11-09 21:07:02
原創
964 人瀏覽過

How to Effectively Disable Connection Pooling for Go's http.Client?

停用Go http.Client 的連線池

在Go 的HTTP 用戶端中,連線池允許高效率地重複使用相同要求之間的連結主持人。但是,出於測試目的,可能需要停用連線池才能為每個 HTTP/1.x 請求建立新的 TCP 連線。

使用 DisableKeepAlives 或 MaxIdleConnsPerHost

連接通常會加入 Transport.tryPutIdleConn 中的池中。要禁用池化,請將Transport.DisableKeepAlives 設置為true 或Transport.MaxIdleConnsPerHost 設置為負值:

func disableKeepAlive(c *http.Client) {
    t := c.Transport.(*http.Transport)
    t.DisableKeepAlives = true
}

func disableMaxIdle(c *http.Client) {
    t := c.Transport.(*http.Transport)
    t.MaxIdleConnsPerHost = -1
}
登入後複製

使用Dialer.KeepAlive

儘管最初假設,但設定Dialer.KeepAlive 選項不會停用

可能的競爭條件

將Transport.IdleConnTimeout 設定為非常短的持續時間(例如1 奈秒)可能會導致「tls:使用關閉連線」錯誤由於Go 標準函式庫中存在潛在的競爭條件。

建議方法

為了確保停用連接池,建議複製預設傳輸並修改其選項:

func disablePooling(c *http.Client) {
    t := c.Transport.(*http.Transport).Clone()
    t.MaxIdleConnsPerHost = -1
    t.DisableKeepAlives = true
}
登入後複製

此方法允許自訂各種傳輸選項,同時保留預設值。

以上是如何有效停用 Go 的 http.Client 連線池?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板