iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >使用Golang怎么模拟令牌桶进行访问
  • 186
分享到

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

2023-06-14 20:06:54 186人浏览 泡泡鱼
摘要

使用golang怎么模拟令牌桶进行访问?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可

使用golang怎么模拟令牌桶进行访问?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Golang的优点

golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标机器而无需额外的依赖,所以golang的性能优于其他的解释性语言,且可以在golang中使用goroutine来实现并发性,它提供了一个非常优雅的goroutine调度程序系统,可以很容易地生成数百万个goroutine。

利用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 <- truetime.Sleep(duration)}}()for <- contain {//如果上一个线程写入一个true,就会运行这个代码块fmt.Println("helllo world")}}

补充:golang简易令牌桶算法实现

基本思路:

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

代码如下:

package mainimport (    "fmt"    "time"    "Httpclient")var LEN int = 10func 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)    }}

看完上述内容,你们掌握使用Golang怎么模拟令牌桶进行访问的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网GO频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: 使用Golang怎么模拟令牌桶进行访问

本文链接: https://www.lsjlt.com/news/275069.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Golang怎么模拟令牌桶进行访问
    使用Golang怎么模拟令牌桶进行访问?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可...
    99+
    2023-06-14
  • Golang模拟令牌桶进行对访问的限流方式
    利用channel进行模拟令牌桶对访问进行限流 func FW(max int,duration time.Duration){ //定义一个channel ,进行初始化 co...
    99+
    2024-04-02
  • go语言中的限流漏桶和令牌桶库怎么使用
    这篇文章主要介绍了go语言中的限流漏桶和令牌桶库怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言中的限流漏桶和令牌桶库怎么使用文章都会有所收获,下面我们一起来看看吧。为什么需要限流中间件?在大数据...
    99+
    2023-07-05
  • 如何在 Golang 中使用随机数进行模拟?
    使用 math/rand 包进行随机数模拟:导入 math/rand 包。使用 time.now().unixnano() 初始化随机数生成器。使用 rand.intn(n) 生成 0 ...
    99+
    2024-05-13
    模拟 随机数 golang
  • 怎么使用lua进行nginx redis访问控制
    本篇内容介绍了“怎么使用lua进行nginx redis访问控制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 需求分析\1. Ngin...
    99+
    2023-06-27
  • JavaScript中怎么使用ajax进行跨域访问
    本文小编为大家详细介绍“JavaScript中怎么使用ajax进行跨域访问”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript中怎么使用ajax进行跨域访问”文章能帮助大家解决疑惑,下面跟着...
    99+
    2024-04-02
  • 使用 Golang exec 命令运行时,Firebase 模拟器不会停止
    编程网今天将给大家带来《使用 Golang exec 命令运行时,Firebase 模拟器不会停止》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是...
    99+
    2024-04-05
  • Webpack怎么使用命令行进行安装
    这篇文章主要介绍了Webpack怎么使用命令行进行安装的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Webpack怎么使用命令行进行安装文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
  • 怎么使用golang执行Linux shell命令
    这篇文章主要讲解了“怎么使用golang执行Linux shell命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用golang执行Linux shell命令”吧...
    99+
    2023-07-02
  • 在Linux中怎么使用Alpine工具在命令行里访问Gmail
    本篇内容介绍了“在Linux中怎么使用Alpine工具在命令行里访问Gmail”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在这个帖子中,我...
    99+
    2023-06-13
  • 怎么使用navicat进行mysql命令行操作
    这篇文章将为大家详细讲解有关怎么使用navicat进行mysql命令行操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、打开Navicat2、点击【工具】菜单,选择【...
    99+
    2024-04-02
  • CentOS怎么允许telnet通过root用户进行访问
    本篇内容介绍了“CentOS怎么允许telnet通过root用户进行访问”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!CentOS:[roo...
    99+
    2023-06-10
  • Golang怎么使用JWT进行认证和加密
    这篇“Golang怎么使用JWT进行认证和加密”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Golang怎么使用JWT进行认...
    99+
    2023-07-05
  • 使用golang怎么滴字符串进行比较
    本篇文章为大家展示了使用golang怎么滴字符串进行比较,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。golang的优点有哪些golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件...
    99+
    2023-06-06
  • 什么是Linux容器索引,如何使用Python进行访问?
    Linux容器索引是一种用于存储、分享和分发容器镜像的公共仓库,类似于Docker Hub。它允许用户上传、下载和共享容器镜像,同时提供了一些有用的功能,如镜像版本控制、镜像标签、镜像自动构建等。在本文中,我们将介绍如何使用Python访问...
    99+
    2023-11-04
    容器 linux 索引
  • 怎么在Java中利用Kafka对客户端进行访问
    这篇文章给大家介绍怎么在Java中利用Kafka对客户端进行访问,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. maven依赖包<dependency> <groupId>org.apac...
    99+
    2023-05-31
    kafka java ava
  • python命令行参数模块argparse怎么使用
    今天小编给大家分享一下python命令行参数模块argparse怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Pyt...
    99+
    2023-07-05
  • vite+vue3中怎么使用mock模拟数据问题
    1.安装mockjs和vite-plugin-mocknpm i mockjs vite-plugin-mock --save-dev2.在vite.config.ts文件中配置vite-plugin-mock使用方式import { de...
    99+
    2023-05-15
    Vue3 vite mock
  • 使用golang怎么对二维数组进行遍历
    今天就跟大家聊聊有关使用golang怎么对二维数组进行遍历,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。golang的优点有哪些golang是一种编译语言,可以将代码编译为机器代码,...
    99+
    2023-06-06
  • 云服务器访问本地虚拟机命令是什么啊怎么用
    OpenID 命令:打开云服务器管理界面 在使用 OpenID 命令之前,需要先打开云服务器管理界面。管理界面会提供 OpenID 的使用说明,如 openid 命令的具体含义、参数设置、使用场景等。在 OpenID 命令中,需要输入...
    99+
    2023-10-27
    虚拟机 命令 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作