首頁 > 後端開發 > Golang > 主體

即使'DisableKeepAlives”設定為 False,為什麼我仍然在 Go HTTP 用戶端中建立多個連線?

Mary-Kate Olsen
發布: 2024-11-03 06:21:30
原創
988 人瀏覽過

Why Am I Still Creating Multiple Connections in My Go HTTP Client Even with `DisableKeepAlives` Set to False?

排查Go 的HTTP 用戶端中的連線重用

問題: 為什麼我的Go HTTP 用戶端會建立到同一主機的多頭主機個連接,儘管使用DisableKeepAlives 選項為false?

Go HTTP 用戶端預設設計為重複使用連線。但是,有某些條件可以阻止它這樣做。

診斷:

在提供的程式碼中,http.Transport.RoundTrip() 方法不是緊接著呼叫 resp.Close()。這可能會導致連線在請求發送後立即關閉,無法將其重新用於後續請求。

解決方案:

為了確保HTTP 連線重複使用,需要兩個步驟:

  1. 讀取直到回應完成,確保從回應正文消耗所有資料。為此,請使用 io.Copy(ioutil.Discard, resp.Body) 或 ioutil.ReadAll(resp.Body)。
  2. 呼叫res.Body.Close() 明確關閉回應正文,釋放連線

程式碼片段:

<code class="go">res, _ := client.Do(req)
io.Copy(ioutil.Discard, res.Body)
res.Body.Close()</code>
登入後複製

程式碼片段:

  • 其他注意事項:
設定將DisableKeepAlives 選項設為true 會明確停用連線重複使用,無論其他設定為何。 可以使用 time.Tick 等技術來限制每秒出站請求的數量。但是,這與連接重用沒有特別關係,如果連接重用正常運行,則可能沒有必要。

以上是即使'DisableKeepAlives”設定為 False,為什麼我仍然在 Go HTTP 用戶端中建立多個連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!