使用Golang怎么模拟令牌桶进行访问

  介绍

使用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怎么模拟令牌桶进行访问的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

使用Golang怎么模拟令牌桶进行访问