您现在的位置是:网站首页> 编程资料编程资料
golang简易令牌桶算法实现代码_Golang_
2023-05-26
451人已围观
简介 golang简易令牌桶算法实现代码_Golang_
基本思路:定义一个chan,chan大小为需要限制的qps大小,go一个协程启动tick,每1000/qps时间在tick中写入数值,启动另一个协程,读取chan中的值,如果读取到chan中有值,则向下层接口发送请求。
代码如下:
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 { //收客户请求,发送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) } } 到此这篇关于golang简易令牌桶算法实现代码的文章就介绍到这了,更多相关golang 令牌桶算法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章:
相关内容
- 一文搞懂Golang文件操作增删改查功能(基础篇)_Golang_
- Go语言reflect.TypeOf()和reflect.Type通过反射获取类型信息_Golang_
- 为什么不建议在go项目中使用init()_Golang_
- Golang二维切片初始化的实现_Golang_
- go语言实现简易比特币系统之交易签名及校验功能_Golang_
- go语言map与string的相互转换的实现_Golang_
- go语言实现简易比特币系统钱包的原理解析_Golang_
- Golang 语言高效使用字符串的方法_Golang_
- 一文读懂go中semaphore(信号量)源码_Golang_
- Go各时间字符串使用解析_Golang_
