Bahasa Go ialah bahasa pengaturcaraan yang cekap Kelebihannya seperti kesederhanaan, kecekapan, keselamatan dan kebolehpercayaan telah diiktiraf dan digunakan secara meluas. Antaranya, sebab mengapa ia digunakan secara meluas juga tidak dapat dipisahkan daripada perpustakaan rangkaian berkuasa yang disokongnya. Artikel ini akan menumpukan pada pemprosesan permintaan Http dalam bahasa Go.
1. Asas pemprosesan permintaan Http
Pemprosesan permintaan HTTP ialah bahagian penting dalam pembangunan back-end Web, dan pemprosesan permintaan Http dalam bahasa Go boleh dikatakan sangat mudah dan mudah untuk gunakan. Mari kita lihat API yang berkaitan.
- http.ListenAndServe()
boleh difahami sebagai pelayan Http, yang boleh mendengar terus ke port tempatan dan menunggu ketibaan permintaan Http.
func ListenAndServe(addr string, handler Handler) error
Antaranya, addr digunakan untuk menentukan alamat rangkaian, bentuk umum ialah "Alamat IP atau nama domain: nombor port ", tetapi jika port Apabila nombornya ialah 0, sistem pengendalian akan memperuntukkan port yang tidak digunakan secara automatik; pengendali ialah fungsi yang digunakan untuk memproses permintaan http.
- http.HandleFunc()
ialah API yang mendaftarkan fungsi panggil balik permintaan http adalah seperti berikut:
func HandleFunc(rentetan corak, pengendali. func( ResponseWriter, *Request))
Antaranya, corak ialah laluan permintaan pendaftaran, dan pengendali ialah fungsi panggil balik permintaan http Struktur fungsi panggil balik adalah seperti berikut:
taip HandlerFunc func(ResponseWriter, * Request)
Anda boleh melihat bahawa parameter rasmi fungsi panggil balik permintaan Http ialah http.ResponseWriter dan *http.Request.
- http.ResponseWriter
ialah jenis respons HTTP yang dikembalikan kepada klien Kaedah yang biasa digunakan ialah:
1) ResponseWriter.Header(), digunakan untuk. tetapkan pengepala respons Http;
2) ResponseWriter.Write(), digunakan untuk menulis badan respons Http kepada klien.
- http.Request
mewakili struktur permintaan HTTP, yang mengandungi butiran semua permintaan HTTP, seperti pengepala, kandungan, kaedah, dll. permintaan HTTP.
- Contoh pemprosesan permintaan HTTP
Coretan kod berikut menunjukkan cara mengendalikan permintaan Http GET dalam bahasa Go, yang memanggil http.HandleFunc() untuk mendaftarkan fungsi panggil balik:
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
})
http.ListenAndServe(":8080", nil)
Salin selepas log masuk
}
Nota: Apabila antara muka permintaan Http ditakrifkan sebagai "/", laluan yang perlu didaftarkan oleh http.HandleFunc() hendaklah ditulis sebagai "/".
2. Kaedah pemprosesan permintaan Http
- http.Get()
digunakan untuk mendapatkan respons permintaan Http jauh Jika kod status pemulangan permintaan itu bukan 2xx, kemudian kembalikan mesej ralat, jenis data yang dikembalikan oleh kaedah ini ialah *http.Response, yang tergolong dalam struktur dan mengandungi banyak atribut Yang lebih penting ialah atribut Badannya mewakili kandungan badan respons permintaan Http Anda boleh menggunakan ioutil Fungsi .ReadAll() membaca kandungan badan Badan.
func (c Pelanggan) Get(rentetan url) (resp Respons, err error)
- http.PostForm()
Gunakan Untuk menyerahkan data borang Http, seperti menyerahkan borang log masuk, ContentType yang paling biasa digunakan ialah jenis aplikasi/x-www-form-urlencoded Jenis pemulangan kaedah ini ialah *http.Response. Perlu diingat bahawa kaedah ini hanya menyokong permintaan POST dan kaedah url.Values.Encode() harus dipanggil untuk mengekod data borang sebelum menyerahkan borang.
func PostForm(rentetan url, url data.Values) (respon *Respons, ralat ralat)
- http.Post()
Kaedah ini adalah sama kerana http. PostForm() adalah serupa, tetapi menyokong lebih banyak jenis permintaan rangkaian, iaitu jenis ContentType tidak terhad kepada application/x-www-form-urlencoded.
func (c Pelanggan) Siaran(rentetan url, rentetan bodyType, body io.Reader) (resp Respons, ralat ralat)
Di mana, bodyType adalah Kandungan-Jenis permintaan, badan ialah kandungan permintaan.
- http.Do()
menyokong lebih banyak jenis permintaan rangkaian dan kami boleh menyesuaikan pengepala permintaan, yang merupakan kaedah permintaan yang paling fleksibel. Perlu diingatkan bahawa kaedah ini akan mengembalikan *http.Response, dan anda perlu menutupnya selepas menggunakan respons.
func (c Pelanggan) Do(req Request) (respon *Respons, err error)
3. Permintaan Http memproses pengoptimuman prestasi
dalam Apabila menggunakan berbilang Goroutines untuk melaksanakan permintaan HTTP pada masa yang sama, kita perlu memahami kesesakan prestasi dan dapat memilih penyelesaian pengoptimuman yang sesuai. Yang berikut memperkenalkan beberapa penyelesaian pengoptimuman prestasi permintaan Http.
- Keep-Alive
Keep-Alive sambungan http adalah untuk mengoptimumkan penggunaan sumber sambungan http sebanyak mungkin dan mengelakkan kehilangan prestasi yang disebabkan oleh penubuhan sambungan TCP yang kerap dan terputusnya sambungan tcp dengan pelayan Menyambung tanpa menutup boleh mengurangkan kehilangan prestasi yang disebabkan oleh penubuhan dan penutupan TCP dan meningkatkan kecekapan permintaan HTTP.
- Kolam sambungan melahu
Jika kita perlu meminta laluan berbeza untuk hos yang sama, kita boleh menggunakan kumpulan sambungan melahu untuk mengurus sambungan Dengan menentukan kepingan untuk menyimpan sambungan, sebelum menggunakan semula, cuba dapatkannya dari hirisan. Dapatkan sambung dan semak sama ada ia boleh digunakan semula. Jika ia tidak boleh digunakan semula, tutup sambungan Jika bilangan sambungan melebihi bilangan sambungan yang paling lama dengan cara ini , bilangan sambungan boleh konsisten dengan bilangan maksimum sambungan sistem pengendalian.
- Sambungan panjang
Apabila sejumlah besar permintaan perlu dimulakan, pengoptimuman sambungan panjang adalah sangat penting Apabila pelayan menyokong Keep-Alive Http, pelanggan boleh menentukan Connection:keep-alive. header. , dengan itu mewujudkan keadaan sambungan yang panjang, yang boleh merealisasikan pemprosesan berbilang permintaan dan respons Sambungan TCP boleh digunakan semula, mengurangkan penubuhan dan penutupan TCP.
4. Ringkasan
Artikel ini terutamanya memperkenalkan pemprosesan permintaan Http dalam bahasa Go Dalam pembangunan sebenar, kami boleh memilih kaedah permintaan rangkaian dan penyelesaian pengoptimuman prestasi mengikut keperluan perniagaan meminta keputusan. Pada masa yang sama, perpustakaan permintaan rangkaian dalam bahasa Go adalah sangat mudah dan mudah digunakan Ia juga menyokong pelbagai kaedah permintaan HTTP dan penyelesaian pengoptimuman, yang memberikan kemudahan yang hebat untuk pembangunan bahagian belakang kami.
Atas ialah kandungan terperinci Penjelasan terperinci tentang pemprosesan permintaan Http dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!