Golang模擬令牌桶進行對訪問的限流方式
利用channel進行模擬令牌桶對訪問進行限流
func FW(max int,duration time.Duration){ //定義一個channel ,進行初始化 contain := make(chan bool , max) for i := 0 ; i < max ; i ++{ contain <- true//寫入channel } go func() {//開啟一個線程 for { contain <- true time.Sleep(duration) } }() for <- contain {//如果上一個線程寫入一個true,就會運行這個代碼塊 fmt.Println("helllo world") } }
補充:golang簡易令牌桶算法實現(xiàn)
基本思路:
定義一個chan,chan大小為需要限制的qps大小,go一個協(xié)程啟動tick,每1000/qps時間在tick中寫入數(shù)值,啟動另一個協(xié)程,讀取chan中的值,如果讀取到chan中有值,則向下層接口發(fā)送請求。
代碼如下:
package main import ( "fmt" "time" "httpclient" ) var LEN int = 10 func tickStoreCh(arrlen int, ch chan int) { len := 1000/arrlen fmt.Println(len) tickTime := time.NewTicker(time.Duration(len)*time.Millisecond) var i int for { fmt.Println(len) i++ <-tickTime.C ch<- i } } func OrganReq(org string, qps int) { ch := make(chan int, qps) go tickStoreCh(qps, ch) time.Sleep(1000*time.Millisecond) for { //收客戶請求,發(fā)送http請求給RE client := httpclient.NewHttpClient(time.Duration(1000)*time.Millisecond, time.Duration(2000)*time.Millisecond) header := make(map[string]string) header["Content-Type"] = "application/json;charset=utf-8" code, err := client.ResponseCode("http://127.0.0.1:19988", header, "llltest") value := <- ch fmt.Println(code, value, err, "lenchan:", len(ch)) //time.Sleep(time.Second) } }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Golang 類型轉(zhuǎn)換的實現(xiàn)(斷言、強制、顯式類型)
將一個值從一種類型轉(zhuǎn)換到另一種類型,便發(fā)生了類型轉(zhuǎn)換,在go可以分為斷言、強制、顯式類型轉(zhuǎn)換,本文就詳細的介紹一下這就幾種轉(zhuǎn)換方式,具有一定的參考價值,感興趣的可以了解一下2023-09-09Golang實現(xiàn)CronJob(定時任務(wù))的方法詳解
這篇文章主要為大家詳細介紹了Golang如何通過一個單 pod 去實現(xiàn)一個常駐服務(wù),去跑定時任務(wù)(CronJob),文中的示例代碼講解詳細,需要的可以參考下2023-04-04Go使用database/sql操作數(shù)據(jù)庫的教程指南
Go?語言中,有一個名為database/sql的標(biāo)準(zhǔn)庫,提供了統(tǒng)一的編程接口,使開發(fā)人員能夠以一種通用的方式與各種關(guān)系型數(shù)據(jù)庫進行交互,本文就來和大家講講它的具體操作吧2023-06-06Go語言標(biāo)準(zhǔn)庫sync.Once使用場景及性能優(yōu)化詳解
這篇文章主要為大家介紹了Go語言標(biāo)準(zhǔn)庫sync.Once使用場景及性能優(yōu)化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12Golang實現(xiàn)的聊天程序服務(wù)端和客戶端代碼分享
這篇文章主要介紹了Golang實現(xiàn)的聊天程序服務(wù)端和客戶端代碼分享,本文先是講解了實現(xiàn)邏輯,然后給出了實現(xiàn)代碼,需要的朋友可以參考下2014-10-10