教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang简易令牌桶算法实现

golang简易令牌桶算法实现

发布时间:2022-01-10   编辑:jiaochengji.com
教程集为您提供golang简易令牌桶算法实现等资源,欢迎您收藏本站,我们将为您提供最新的golang简易令牌桶算法实现资源

基本思路:定义一个chan,chan大小为需要限制的qps大小,go一个协程启动tick,每1000/qps时间在tick中写入数值,启动另一个协程,读取chan中的值,如果读取到chan中有值,则向下层接口发送请求。

代码如下:

<blockquote>

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)
    }
}

</blockquote> 到此这篇关于“golang简易令牌桶算法实现”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Golang 限流器的使用和实现
(三)go-kit服务接口限流
golang简易令牌桶算法实现
令牌桶算法如何使用php实现
Golang map底层实现原理解析
electron窗口自适应_Go 限流器系列(3)自适应限流
map的自动扩容与手动缩容
golang key map 所有_golang之map详解 - 01基础数据结构
php洗牌算法的实现代码
Golang channel实现limiter

[关闭]
~ ~