Dalam pembangunan harian, kita sering menghadapi senario konkurensi tinggi, dan pengehadan arus yang ketat amat penting pada masa ini. Di Golang, cara biasa untuk melaksanakan pengehadan semasa ialah menggunakan pemasa (Pemasa) untuk mengehadkan bilangan permintaan serentak dengan mengawal masa pencetus pemasa. Artikel ini akan memperkenalkan cara menggunakan pemasa Golang untuk melaksanakan pengehadan semasa.
1. Apakah pemasa?
Di Golang, Pemasa ialah pemasa peringkat sistem Anda boleh membuat pemasa untuk mencetuskan tugas atau acara dengan kerap. Apabila membuat Pemasa, anda perlu menentukan selang masa dan anda boleh menggunakan kaedah Tetapkan Semula untuk menetapkan semula atau menghentikan pemasa.
Idea asas menggunakan pemasa untuk melaksanakan pengehadan semasa ialah: tetapkan selang masa, seperti 1 saat Setiap kali permintaan datang, kami menetapkan semula pemasa jika bilangan permintaan tiba dalam masa 1 saat Jika ambang yang ditetapkan melebihi, permintaan akan ditolak.
2. Proses menggunakan pemasa untuk melaksanakan pengehadan semasa
Proses menggunakan pemasa untuk melaksanakan pengehadan semasa adalah seperti berikut:
3. Contoh kod pelaksanaan
Di Golang, pakej masa dalam perpustakaan standard menyediakan jenis Pemasa dan jenis Ticker, yang boleh digunakan untuk mencipta pemasa. Berikut ialah kod sampel yang menggunakan Pemasa untuk melaksanakan pengehadan semasa:
package main import ( "fmt" "time" ) func main() { maxRequests := 100 //最多请求量 interval := 1 * time.Second //间隔时间 timer := time.NewTimer(interval) counter := 0 //请求计数器 for { select { case <-timer.C: // 定时器到期 fmt.Println("time up") if counter > maxRequests { // 如果请求数超出限制 fmt.Printf("too many requests, counter=%d ", counter) } else { fmt.Printf("counter=%d ", counter) } counter = 0 // 重置计数器 timer.Reset(interval) // 重置定时器 default: time.Sleep(time.Millisecond * 100) // 模拟处理请求的耗时 counter++ // 计数器加1 } } }
Analisis kod:
Kod sampel ini menetapkan pengawal pengehad semasa dengan bilangan maksimum permintaan 100 dan selang 1 saat. Dalam gelung utama, pantau peristiwa tamat tempoh pemasa melalui pernyataan pilih, dan lakukan pemprosesan pengehadan semasa apabila pemasa tamat tempoh.
Gunakan masa.Tidur di cawangan lalai untuk mensimulasikan masa penggunaan permintaan dan tambah 1 pada kaunter. Apabila pemasa tamat tempoh, tentukan sama ada nilai pembilang melebihi ambang yang ditetapkan Jika ia berlaku, tolak permintaan dan keluarkan mesej segera yang menunjukkan bahawa terdapat terlalu banyak permintaan Jika tidak, keluarkan bilangan permintaan semasa, kosongkan pembilang dan tetapkan semula pemasa.
4. Gunakan Ticker untuk melaksanakan pengehadan semasa
Selain Pemasa, Golang juga menyediakan jenis masa yang dipanggil Ticker, yang serupa dengan jenis Pemasa, tetapi boleh mencetuskan peristiwa secara berkala. Berikut ialah contoh kod yang turut menggunakan pembilang dan pemasa untuk melaksanakan pengehadan semasa Kali ini jenis Ticker digunakan:
package main import ( "fmt" "time" ) func main() { maxRequests := 100 //最多请求量 interval := 1 * time.Second //间隔时间 ticker := time.NewTicker(interval) counter := 0 //请求计数器 for { select { case <-ticker.C: // 定时器到期 fmt.Println("time up") if counter > maxRequests { // 如果请求数超出限制 fmt.Printf("too many requests, counter=%d ", counter) } else { fmt.Printf("counter=%d ", counter) } counter = 0 // 重置计数器 default: time.Sleep(time.Millisecond * 100) // 模拟处理请求的耗时 counter++ // 计数器加1 } } }
Perbezaan daripada kod contoh yang dilaksanakan oleh Pemasa ialah kali ini kita menggunakan fungsi NewTicker. untuk mencipta objek Pemasa dan mendengar acara tanda pemasa dalam gelung utama. Apabila acara tanda tiba, kaunter disemak dan dikosongkan, masa pemprosesan permintaan disimulasikan dalam cawangan lalai, dan nilai kaunter dinaikkan.
Perlu diingat bahawa apabila menggunakan Ticker, kaedah Stop mesti dipanggil untuk menghentikan pemasa apabila program keluar. Jika tidak, pemasa akan sentiasa berjalan di latar belakang dan membazirkan sumber.
5. Ringkasan
Artikel ini memperkenalkan cara menggunakan pemasa (Pemasa) dan Ticker Golang untuk melaksanakan pengehadan semasa Dalam senario konkurensi tinggi, kawalan pengehadan arus yang ketat adalah penting. Menggunakan pemasa untuk melaksanakan pengehadan semasa ialah cara yang cekap dan boleh dipercayai, dan merupakan komponen yang amat diperlukan untuk banyak aplikasi web peringkat perusahaan.
Semasa proses pelaksanaan, anda perlu memahami prinsip kerja dan penggunaan pemasa, dan menetapkan parameter yang munasabah seperti selang masa dan bilangan maksimum permintaan untuk memastikan kawalan pengehad semasa boleh mencapai kesan yang optimum.
Atas ialah kandungan terperinci Pemasa Golang melaksanakan pengehadan semasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!