首页 > 其他分享 >1s内控制向某个请求请求的次数

1s内控制向某个请求请求的次数

时间:2024-07-03 22:09:10浏览次数:24  
标签:1s const 请求 request 次数 startIndex num total

背景

有的时候后端提供的接口对相同的IP进行限制,在某个时间内不能发送超过X条的请求,一旦超过指定的请求数会导致后续请求接口会出现异常。

效果

需求

比如:在1s内最多同时发送2个请求,多出来的请求在后续的1s或者后续的Ns中发起

代码

<template>
  <div class="app">
    <el-divider content-position="center"
      >1.1s内向某个IP最多发送2个请求</el-divider
    >
    <el-button type="primary" @click="send_request">发送请求</el-button>
  </div>
</template>

<script>
import axios from 'axios'
export default {
  data() {
    return {}
  },
  methods: {
    send_request() {
      // 需要发送的请求个数
      const need_send_request_num = 5
      const queue_arr = []
      /**
       *
       * @param total_request_num 需要向服务请求的总数
       * @param max_request_num  向某个IP最大请求数量
       * @param startIndex       第N个请求
       */
      const foo = (total_request_num, max_request_num = 2, startIndex = 0) => {
        if (startIndex >= total_request_num) {
          // console.log('所有请求完成了')
          // TODO:所有请求完成时
          Promise.all(queue_arr).then((res) => {
            console.log(res)
          })
        } else {
          const endIndex =
            startIndex + max_request_num > total_request_num
              ? total_request_num
              : startIndex + max_request_num
          let i = startIndex
          for (; i < endIndex; i++) {
            queue_arr.push(this.fetchData(i))
          }
          setTimeout(() => {
            foo(total_request_num, max_request_num, i)
          }, 1000)
        }
      }
      foo(need_send_request_num)
    },
    async fetchData(index) {
      const res = await axios.get('https://httpbin.org/get', {
        params: {
          index,
        },
      })
      return res.data
    },
  },
}
</script>

<style lang="less" scoped>
.app {
  padding: 40px;
}
</style>

标签:1s,const,请求,request,次数,startIndex,num,total
From: https://www.cnblogs.com/it774274680/p/18282640

相关文章

  • 什么是 HTTP Range请求(范围请求)
    HTTPRange请求,也称为范围请求,是一种HTTP协议的功能,它允许客户端请求服务器发送一个资源的一部分,而不是整个资源。这种请求通常用于处理大文件的下载或流媒体服务,尤其是在网络不稳定或需要断点续传的场景中非常有用。范围请求的基本语法如下:Range:bytes=<start_byte>-<end_b......
  • csrf跨站请求,钓鱼网站实现示例,CSRF校验,CSRF相关装饰器,Auth模块,扩展Auth表
    ⅠDjango框架之csrf跨站请求【一】跨站请求伪造介绍【1】引入CSRF(Cross-SiteRequestForgery)跨站请求伪造是一种常见的网络攻击方式。攻击者通过诱导受害者访问恶意网站或点击恶意链接将恶意请求发送到目标网站上利用受害者在目标网站中已登录的身份来执行某些操作从而......
  • open ai sdk 的额外请求头说明 x-stainless
    使用openai-python,openai-node会有额外的x-stainless系列请求头,特此记录一下,大概是记录了一些平台架构信息,但是这些请求头不常见,所以使用ollama等平台的时候,允许cors的时候,最好通过nginx代理,允许这些头,否则会请求接口失败https://community.openai.com/t/system-data-is......
  • Vue3全局配置Axios并解决跨域请求问题示例详解
    背景对于前后端分离项目,前端和后端端口不能重复,否则会导致前端或者后端服务起不来。例如前端访问地址为: http://localhost:8080/ ,后端访问地址为 http://localhost:8081/ 。后端写好Controller,当用Axios访问该接口时,将会报错:AccesstoXMLHttpRequestat'http://localh......
  • tengine/nginx https请求 转发 http upstream
    转载自:https://blog.csdn.net/windywolf301/article/details/135548805?spm=1001.2014.3001.5502为什么要将https转发为http当前的互联网应用基本都要支持https协议,而当浏览器头通过https协议将请求发到到负责负载的nginx后,会由当前nginx再以http协议向后端upstream进行请求,之所......
  • 黑马点评下订单-小程序下单没问题但是Postman发送请求失败了,返回401
    经过多方探索,这个✓8错误就是由于黑马点评使用了拦截器,我们直接发送请求是会被拦截器拦截下来的,我给出的解决方案是通过配置Postman解决,方法很简单!解决方案右边的value写上Redis里面登录所用token值就可以了!!!......
  • logstash 收集 http POST请求中的json日志时,字段冲突问题
    https://www.elastic.co/guide/en/logstash/current/plugins-inputs-http.html修改vim/etc/logstash/logstash.ymlpipeline.ecs_compatibility:disabled不关闭的话,会自动添加这几个字段可能会与json中的同名字段冲突{"@version"=>"1","user_agent"......
  • POST和GET请求乱码问题
    简介:在很多情况下我们使用get或者post请求时会出现乱码问题。本文的目标是教会读者解决该问题。1.get请求乱码问题使用get请求提交数据时,数据会回显在uri上,例如:/springmvc/login?username=张三&password=123(注意:这不是一个很好的示范username和password这种敏感信息不应该使用......
  • C# HttpWebRequest 各种请求方式汇总
    GET//直接返回字符串publicstaticstringGets(stringurl,JObjectheaders){stringresult="";HttpWebRequestreq=(HttpWebRequest)WebRequest.Create(url);req.Method="Get";if(headers!=null){IEnumerable&......
  • 原生js实现http请求--模拟jquery的ajax函数
     有时页面用到请求,但又不想引入jquery或者其他网络请求,增加代码冗余,增加对代码简便化,那不使用ajax情况下,可以直接使用原生js进行封装函数。原生的js通过XMLHttpRequest 对象进行的的。具体可查阅W3school的XMLHttpRequest 对象。1、封装可供请求调用的函数 functionht......