Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Saya Masih Mencipta Berbilang Sambungan dalam Klien HTTP Go Saya Walaupun dengan `DisableKeepAlives` Ditetapkan kepada Palsu?

Mengapa Saya Masih Mencipta Berbilang Sambungan dalam Klien HTTP Go Saya Walaupun dengan `DisableKeepAlives` Ditetapkan kepada Palsu?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 06:21:30994semak imbas

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

Menyelesaikan Masalah Penggunaan Semula Sambungan dalam Klien HTTP Go

Masalah: Mengapa klien HTTP Go saya mencipta berbilang sambungan ke hos yang sama, walaupun menggunakan Pilihan DisableKeepAlives sebagai palsu?

Klien HTTP Go direka untuk menggunakan semula sambungan secara lalai. Walau bagaimanapun, terdapat syarat tertentu yang boleh menghalangnya daripada berbuat demikian.

Diagnosis:

Dalam kod yang disediakan, kaedah http.Transport.RoundTrip() bukan serta-merta diikuti dengan panggilan ke resp.Close(). Ini boleh menyebabkan sambungan ditutup serta-merta selepas permintaan dihantar, menghalangnya daripada digunakan semula untuk permintaan seterusnya.

Penyelesaian:

Untuk memastikan sambungan HTTP digunakan semula, dua langkah perlu:

  1. Baca sehingga respons selesai, pastikan semua data digunakan daripada badan respons. Gunakan io.Copy(ioutil.Discard, resp.Body) atau ioutil.ReadAll(resp.Body) untuk tujuan ini.
  2. Panggil res.Body.Close() untuk menutup badan respons secara eksplisit, melepaskan sambungan untuk digunakan semula.

Snippet Kod:

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

Pertimbangan Tambahan:

  • Menetapkan Pilihan DisableKeepAlives kepada true secara eksplisit melumpuhkan penggunaan semula sambungan, tanpa mengira tetapan lain.
  • Menghadkan bilangan permintaan keluar sesaat boleh dicapai menggunakan teknik seperti masa. Tandakan. Walau bagaimanapun, ini tidak berkaitan secara khusus dengan penggunaan semula sambungan dan mungkin tidak diperlukan jika penggunaan semula sambungan berfungsi dengan betul.

Atas ialah kandungan terperinci Mengapa Saya Masih Mencipta Berbilang Sambungan dalam Klien HTTP Go Saya Walaupun dengan `DisableKeepAlives` Ditetapkan kepada Palsu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn