主頁 > 知識庫 > Golang模擬令牌桶進(jìn)行對訪問的限流方式

Golang模擬令牌桶進(jìn)行對訪問的限流方式

熱門標(biāo)簽:涿州代理外呼系統(tǒng) excel地圖標(biāo)注分布數(shù)據(jù) 外呼系統(tǒng)顯本地手機(jī)號 百度地圖標(biāo)注后傳給手機(jī) 壽光微信地圖標(biāo)注 外呼系統(tǒng)用什么卡 阿克蘇地圖標(biāo)注 評價(jià)高的400電話辦理 電話機(jī)器人軟件免費(fèi)

利用channel進(jìn)行模擬令牌桶對訪問進(jìn)行限流

func FW(max int,duration time.Duration){
//定義一個(gè)channel ,進(jìn)行初始化
	contain := make(chan bool , max)
	for i := 0 ; i  max ; i ++{
		contain - true//寫入channel
	}
	go func() {//開啟一個(gè)線程
		for {
			contain - true
			time.Sleep(duration)
		}
	}()
	for - contain {//如果上一個(gè)線程寫入一個(gè)true,就會運(yùn)行這個(gè)代碼塊
		fmt.Println("helllo world")
	}
}

補(bǔ)充:golang簡易令牌桶算法實(shí)現(xiàn)

基本思路:

定義一個(gè)chan,chan大小為需要限制的qps大小,go一個(gè)協(xié)程啟動tick,每1000/qps時(shí)間在tick中寫入數(shù)值,啟動另一個(gè)協(xié)程,讀取chan中的值,如果讀取到chan中有值,則向下層接口發(fā)送請求。

代碼如下:

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 {
        //收客戶請求,發(fā)送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)
    }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang簡易令牌桶算法實(shí)現(xiàn)代碼
  • 詳解Golang實(shí)現(xiàn)請求限流的幾種辦法
  • golang高并發(fā)限流操作 ping / telnet
  • golang接口IP限流,IP黑名單,IP白名單的實(shí)例
  • Golang 限流器的使用和實(shí)現(xiàn)示例
  • Golang實(shí)現(xiàn)請求限流的幾種辦法(小結(jié))

標(biāo)簽:雞西 蘭州 梅河口 欽州 銅川 汕頭 吐魯番 重慶

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang模擬令牌桶進(jìn)行對訪問的限流方式》,本文關(guān)鍵詞  Golang,模擬,令牌桶,進(jìn)行,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang模擬令牌桶進(jìn)行對訪問的限流方式》相關(guān)的同類信息!
  • 本頁收集關(guān)于Golang模擬令牌桶進(jìn)行對訪問的限流方式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章