介绍
使用Golang怎么模拟令牌桶进行访问?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
Golang的优点
Golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标机器而无需额外的依赖,所以Golang的性能优于其他的解释性语言,且可以在Golang中使用goroutine来实现并发性,它提供了一个非常优雅的goroutine调度程序系统,可以很容易地生成数百万个goroutine。
利用通道进行模拟令牌桶对访问进行限流
func 弗兰克-威廉姆斯(max int, duration time.Duration) {//定义一个channel ,进行初始化 contain :=, (chan bool ,, max) for 小姐::=,0,,,小姐:& lt;, max ,,小姐:+ + { contain & lt;作用;真正的//写入通道 } go func(),{//开启一个线程 for { contain & lt;作用;真实的 time . sleep(持续时间) } } () for & lt;安康;contain {//如果上一个线程写入一个真实的,就会运行这个代码块 fmt.Println (“helllo world") } }
<>强补充:golang简易令牌桶算法实现强>
基本思路:
定义一个陈,陈大小为需要限制的每秒大小,去一个协程启动蜱虫,每1000/每秒时间在蜱虫中写入数值,启动另一个协程,读陈取中的值,如果读取到陈中有值,则向下层接口发送请求。
代码如下:
package 主要 import ( ,,,“fmt" ,,,“time" ,,,“httpclient" ) var LEN int =10 func tickStoreCh (arrlen , int, ch chan int), { ,,,len :=1000/arrlen ,,,fmt.Println(兰) ,,,tickTime :=, time.NewTicker (time.Duration (len) * time.Millisecond) ,,,var 小姐:int ,,,for { ,,,,,,,fmt.Println(兰) ,,,,,,,我+ + ,,,,,,,& lt; -tickTime.C ,,,,,,ch<作用;我 ,,,} } 字符串,func OrganReq (org qps int), { ,,,ch :=, (chan , int,每秒) ,,,go tickStoreCh(每秒,ch) ,,,time . sleep (1000 * time.Millisecond) ,,,for { ,,,,,,,//收客户请求,发送http请求给再保险 ,,,,,,,client :=, httpclient.NewHttpClient (time.Duration (1000) * time.Millisecond, time.Duration (2000) * time.Millisecond) ,,,,,,,header :=, (map [string]字符串) ,,,,,,,头(“Content-Type"),=,“application/json; charset=utf-8" ,,,,,,,,err 代码:=,client.ResponseCode (“http://127.0.0.1:19988",,头,,“llltest") ,,,,,,,value :=& lt;作用;ch ,,,,,,,fmt.Println(代码,,,,呃,,“lenchan:“,, len (ch)) ,,,,,,,//time . sleep (time.Second) ,,,} }
看完上述内容,你们掌握使用Golang怎么模拟令牌桶进行访问的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!