golang簡易令牌桶算法實(shí)現(xiàn)代碼
基本思路:定義一個(gè)chan,chan大小為需要限制的qps大小,go一個(gè)協(xié)程啟動tick,每1000/qps時(shí)間在tick中寫入數(shù)值,啟動另一個(gè)協(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)
}
}
到此這篇關(guān)于golang簡易令牌桶算法實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)golang 令牌桶算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang goquery selector選擇器使用示例大全
這篇文章主要為大家介紹了golang goquery selector選擇器使用示例大全,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
利用Go語言實(shí)現(xiàn)流量回放工具的示例代碼
今天給大家推薦一款使用Go語言編寫的流量回放工具?--?goreplay;工作中你一定遇到過需要在服務(wù)器上抓包的場景,有了這個(gè)工具就可以助你一臂之力,廢話不多,我們接下來來看一看這個(gè)工具2022-09-09
Go語言實(shí)現(xiàn)關(guān)閉http請求的方式總結(jié)
面試的時(shí)候問到如何關(guān)閉http請求,一般人脫口而出的是關(guān)閉response.body,這是錯(cuò)誤的。本文為大家整理了三個(gè)正確關(guān)閉http請求的方法,希望對大家有所幫助2023-02-02
Go語言中的匿名結(jié)構(gòu)體用法實(shí)例
這篇文章主要介紹了Go語言中的匿名結(jié)構(gòu)體用法,實(shí)例分析了匿名結(jié)構(gòu)體的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02

