Golang模拟令牌桶进行对访问的限流方式

作者:鹿灏楷silves 时间:2024-04-26 17:34:25 

利用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简易令牌桶算法实现

基本思路:

定义一个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)
   }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持asp之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://blog.csdn.net/Xiang_lhh/article/details/114990448

标签:Golang,令牌桶,限流
0
投稿

猜你喜欢

  • 在vue-cli3中使用axios获取本地json操作

    2023-07-02 17:07:12
  • python迭代dict的key和value的方法

    2021-11-03 16:04:17
  • tkinter如何实现label超链接调用浏览器打开网址

    2023-04-05 15:08:20
  • OpenCV实现机器人对物体进行移动跟随的方法实例

    2023-04-20 08:50:49
  • MySQL图形化管理工具Navicat安装步骤

    2024-01-29 05:00:45
  • 对python cv2批量灰度图片并保存的实例讲解

    2022-06-11 18:21:36
  • python使用pandas按照行数分割表格

    2021-06-25 03:58:51
  • python开发之thread实现布朗运动的方法

    2021-04-10 00:17:36
  • 关于淘宝商城新版的一点看法

    2009-06-28 16:00:00
  • CSS教程:轻松解决表格的nobr问题

    2008-10-29 11:55:00
  • PHP中文字符串截断无乱码解决方法

    2024-05-11 09:44:55
  • JavaScript生成.xls文件的代码

    2024-04-22 22:17:34
  • 基于javascript实现表格的简单操作

    2024-04-30 08:55:24
  • Python常用库Numpy进行矩阵运算详解

    2023-01-04 02:45:52
  • python如何给内存和cpu使用量设置限制

    2021-03-04 00:43:00
  • python中对开区间和闭区间的理解

    2022-02-09 17:47:29
  • Python开发微信公众平台的方法详解【基于weixin-knife】

    2023-03-09 12:05:43
  • Python实现简单的四则运算计算器

    2022-12-29 20:44:08
  • 教你怎么用python selenium实现自动化测试

    2022-01-17 04:42:53
  • Vue.js结合SortableJS实现树形数据拖拽

    2024-04-30 10:38:06
  • asp之家 网络编程 m.aspxhome.com