Mematikan Pengumpulan Sambungan untuk Go http.Client
Untuk mencapai sambungan TCP baharu bagi setiap permintaan HTTP/1.x semasa menguji, melumpuhkan mekanisme pengumpulan sambungan dalam klien HTTP Go adalah penting. Ini boleh dicapai dengan mengubah suai pengangkutan HTTP yang dikaitkan dengan pelanggan.
Satu pendekatan ialah menetapkan DisableKeepAlives kepada benar dalam pengangkutan:
t := http.DefaultTransport.(*http.Transport).Clone() t.DisableKeepAlives = true c := &http.Client{Transport: t}
Pilihan ini melumpuhkan sambungan keep-alive secara eksplisit, memaksa pelanggan untuk mewujudkan sambungan TCP baharu untuk setiap permintaan. Walau bagaimanapun, ia mungkin menambah sambungan: tutup pengepala kepada permintaan.
Sebagai alternatif, menetapkan MaxIdleConnsPerHost kepada nilai negatif dengan berkesan melumpuhkan pengumpulan:
t := http.DefaultTransport.(*http.Transport).Clone() t.MaxIdleConnsPerHost = -1 c := &http.Client{Transport: t}
Dengan pilihan ini, pengangkutan tidak akan sekali-kali menambah sambungan ke kolam renang, memastikan sambungan baharu diwujudkan untuk setiap permintaan.
Mencipta pengangkutan baharu untuk menyimpan ini tetapan disyorkan untuk mengekalkan konfigurasi pengangkutan lalai.
Menetapkan Dialer.KeepAlive kepada -1 tidak melumpuhkan pengumpulan kerana ia mengawal terutamanya kelakuan keep-alive untuk sambungan aktif. Bertentangan dengan andaian biasa, pilihan ini tidak memberi kesan kepada bilangan sambungan TCP yang diwujudkan.
Akhir sekali, menetapkan IdleConnTimeout kepada tempoh yang sangat singkat, seperti 1 * masa.Nanosaat, juga boleh membantu memastikan sambungan melahu ditutup dengan segera. Walau bagaimanapun, pendekatan ini harus digunakan dengan berhati-hati untuk mengelakkan keadaan perlumbaan yang berpotensi.
Atas ialah kandungan terperinci Bagaimanakah saya boleh melumpuhkan Pengumpulan Sambungan dalam http.Client Go untuk Sambungan TCP Baru?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!