Rumah > Artikel > pembangunan bahagian belakang > Penjelasan terperinci tentang klien HTTP dan kumpulan sambungan rangka kerja Gin
Rangka kerja Gin ialah rangka kerja web ringan yang direka bentuk untuk menyediakan model pemprosesan web berprestasi tinggi dan ketersediaan tinggi. Dalam rangka kerja Gin, klien HTTP dan kumpulan sambungan adalah komponen yang sangat penting. Artikel ini akan menyelidiki butiran pelaksanaan asas klien HTTP dan kumpulan sambungan dalam rangka kerja Gin.
1. Pelanggan HTTP
Klien HTTP ialah komponen teras dalam rangka kerja Gin untuk menghantar permintaan HTTP. Dalam rangka kerja Gin, terdapat banyak pelaksanaan klien HTTP yang berbeza, tetapi dua yang paling biasa digunakan ialah pakej net/http dan pakej fasthttp.
Menggunakan permintaan net/http memerlukan mewujudkan sambungan TCP, menghantar permintaan HTTP, membaca respons pelayan dan akhirnya menutup sambungan TCP. Proses ini boleh menyebabkan kehilangan prestasi tertentu. Jika anda perlu menghantar sejumlah besar permintaan, disyorkan untuk menggunakan pengumpulan sambungan untuk meningkatkan prestasi.
Berikut ialah contoh menggunakan pakej net/http untuk menghantar permintaan HTTP ke Baidu dan mendapatkan respons:
func main() { resp, err := http.Get("http://www.baidu.com") if err != nil { log.Fatal(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(string(body)) }
fasthttp ialah klien dan pelayan HTTP berprestasi tinggi, lebih pantas daripada pakej net/http. Ia ditulis dalam Go dan boleh mengendalikan sejumlah besar permintaan dengan cepat. Ia juga mempunyai pelaksanaan kolam sambungan.
Berikut ialah contoh menggunakan pakej fasthttp untuk menghantar permintaan HTTP ke Baidu dan mendapatkan respons:
func main() { client := &fasthttp.Client{} req := fasthttp.AcquireRequest() defer fasthttp.ReleaseRequest(req) req.SetRequestURI("http://www.baidu.com") resp := fasthttp.AcquireResponse() defer fasthttp.ReleaseResponse(resp) err := client.Do(req, resp) if err != nil { log.Fatal(err) } fmt.Println(resp.String()) }
The berikut menggunakan hasil Ujian HTTP berbeza bagi pakej pelanggan yang membuat 1,000 permintaan serentak kepada Baidu pada masa yang sama:
Alat ujian: ApacheBench
Konfigurasi persekitaran ujian: MacBook Air 13-inci RAM 8G
Ujian keputusan: (unit: saat)
Dapat dilihat bahawa menggunakan pakej fasthttp untuk menghantar permintaan HTTP adalah lebih pantas daripada pakej net/http.
2. Kumpulan sambungan
Kolam sambungan ialah komponen utama untuk meningkatkan prestasi klien HTTP. Semasa proses permintaan klien HTTP, kos masa yang diperlukan untuk mewujudkan dan mengekalkan sambungan TCP adalah agak tinggi. Kumpulan sambungan boleh menggunakan semula sambungan TCP yang telah ditetapkan, mengurangkan kos masa setiap permintaan dan meningkatkan prestasi.
Dalam rangka kerja Gin, terdapat banyak kaedah pelaksanaan penggabungan sambungan yang berbeza Mari perkenalkan mereka masing-masing di bawah.
Dalam pakej net/http, pengumpulan sambungan didayakan secara lalai. Ia menggunakan mekanisme TCPKeepAlive, yang akan memastikan sambungan TCP terbuka selepas sambungan TCP selesai sehingga sambungan semasa ditutup atau ditutup oleh pelayan. Saiz kumpulan sambungan boleh dikawal dengan mengubah suai struktur Pengangkutan:
transport := &http.Transport{ MaxIdleConns: 10, IdleConnTimeout: 30 * time.Second, } httpClient := &http.Client{ Transport: transport, }
MaxIdleConns mewakili bilangan maksimum sambungan melahu dan IdleConnTimeout mewakili masa melahu maksimum sambungan melahu. Saiz kolam sambungan boleh dikawal dengan mengubah suai kedua-dua parameter ini.
Dalam pakej fasthttp, kumpulan sambungan dilaksanakan sedikit berbeza daripada pakej net/http. Ia dilaksanakan melalui struktur Klien, dan saiz kolam sambungan boleh ditukar dengan menukar parameter MaxConnsPerHost:
client := &fasthttp.Client{ MaxConnsPerHost: 100, }
MaxConnsPerHost mewakili bilangan maksimum sambungan yang diselenggara oleh setiap hos. Saiz kolam sambungan boleh ditukar dengan menukar parameter ini.
Berikut ialah keputusan ujian menggunakan kumpulan sambungan berbeza untuk meminta Baidu 1000 kali serentak:
Alat ujian: ApacheBench
Konfigurasi persekitaran ujian: MacBook Air 13-inci RAM 8G
Keputusan ujian: (Unit: saat)
Ia boleh dilihat bahawa kumpulan sambungan menggunakan fasthttp pakej adalah lebih baik daripada kumpulan sambungan pakej net/http cepat.
Kesimpulan
Selepas ujian, klien HTTP dan kumpulan sambungan pakej fasthttp mempunyai prestasi yang lebih tinggi daripada pakej net/http, terutamanya apabila mengendalikan sejumlah besar permintaan. Oleh itu, apabila menggunakan rangka kerja Gin untuk menghantar permintaan HTTP, kami mengesyorkan menggunakan pakej fasthttp untuk meningkatkan prestasi. Pada masa yang sama, anda perlu memberi perhatian kepada tetapan kumpulan sambungan untuk menggunakan sepenuhnya faedah penggunaan semula kumpulan sambungan TCP.
Atas ialah kandungan terperinci Penjelasan terperinci tentang klien HTTP dan kumpulan sambungan rangka kerja Gin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!