Cara melaksanakan had permintaan menggunakan konteks dalam Go
Apabila membangunkan aplikasi web, had permintaan ialah tugas yang sangat penting, yang boleh membantu kami mengawal penggunaan sumber dan melindungi kestabilan sistem. Pakej konteks disediakan dalam pustaka standard bahasa Go, yang boleh digunakan untuk mengurus konteks permintaan dan melaksanakan fungsi sekatan permintaan. Artikel ini akan memperkenalkan cara menggunakan konteks untuk melaksanakan sekatan permintaan dalam Go dan memberikan contoh kod yang sepadan.
1 Fahami pakej konteks
Pakej konteks ialah perpustakaan standard dalam bahasa Go yang digunakan untuk memindahkan maklumat konteks permintaan. Ia menyediakan beberapa kaedah untuk membantu kami mengurus kitaran hayat permintaan, membatalkan permintaan, lulus nilai permintaan, dsb. Berikut ialah beberapa kaedah yang biasa digunakan dalam pakej konteks:
2. Gunakan konteks untuk melaksanakan sekatan permintaan
Di bawah kami akan menggunakan beberapa kaedah pakej konteks untuk melaksanakan fungsi sekatan permintaan yang mudah. Katakan kita ingin mengehadkan antara muka tertentu untuk hanya mengendalikan 10 permintaan sesaat Permintaan yang melebihi had ini akan ditolak. Kita boleh mencapai fungsi ini dengan menggunakan pakej konteks Kodnya adalah seperti berikut:
package main import ( "context" "fmt" "time" ) func main() { // 创建一个带有取消功能的Context ctx, cancel := context.WithCancel(context.Background()) defer cancel() // 启动一个goroutine来执行请求处理 go handleRequests(ctx) // 模拟发送100个请求 for i := 1; i <= 100; i++ { select { case <-ctx.Done(): fmt.Println("Too many requests, request", i, "cancelled") default: // 发送请求 sendRequest(i) // 等待一秒钟 time.Sleep(time.Second) } } } func handleRequests(ctx context.Context) { // 创建一个计数器 counter := 0 for { select { case <-ctx.Done(): return default: // 检查当前请求数量是否超过限制 if counter >= 10 { time.Sleep(time.Second) } else { // 处理请求 handleRequest(counter) // 计数器加一 counter++ } } } } func handleRequest(requestID int) { fmt.Println("Handling request", requestID) } func sendRequest(requestID int) { fmt.Println("Sending request", requestID) }
Dalam kod di atas, kita mula-mula mencipta Konteks dengan fungsi pembatalan dan memulakan goroutine untuk mengendalikan permintaan. Kemudian, dalam gelung yang mensimulasikan penghantaran permintaan, kami menggunakan penyataan pilih untuk menentukan sama ada bilangan permintaan semasa melebihi had Jika ia tidak melebihi had, kemudian hantar permintaan dan tambahkan satu pembilang, jika tidak, tunggu satu kedua. Akhir sekali, dalam fungsi yang mengendalikan permintaan, kami hanya mencetak ID permintaan.
3. Menjalankan hasil
Apabila kita menjalankan kod di atas, hasil output akan serupa dengan yang berikut:
Sending request 1 Handling request 0 Sending request 2 Handling request 1 Sending request 3 Handling request 2 Sending request 4 Handling request 3 Sending request 5 Handling request 4 Sending request 6 Handling request 5 Sending request 7 Handling request 6 Sending request 8 Handling request 7 Sending request 9 Handling request 8 Too many requests, request 11 cancelled Too many requests, request 16 cancelled Too many requests, request 21 cancelled ...
Seperti yang dapat dilihat daripada hasil output, 10 permintaan pertama boleh diproses secara normal, tetapi seiring dengan berlalunya masa oleh, menghantar Bilangan permintaan melebihi had, jadi permintaan melebihi had dibatalkan.
4. Ringkasan
Artikel ini memperkenalkan cara menggunakan pakej konteks untuk melaksanakan sekatan permintaan. Melalui contoh kod, kami belajar cara membuat, membatalkan dan lulus konteks serta cara mengehadkan bilangan permintaan semasa menggunakan konteks. Saya berharap melalui pengenalan artikel ini, anda boleh lebih memahami cara menggunakan konteks untuk melaksanakan sekatan permintaan dalam Go.
Atas ialah kandungan terperinci Cara melaksanakan had permintaan menggunakan konteks dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!