如何限制请求的并发数量

这篇具有很好参考价值的文章主要介绍了如何限制请求的并发数量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


需求:当前端同时发出多个api请求,在前端对请求的并发数量进行限制,做到同时只能处理有限个请求任务

设计思路:

  • 设计 Scheduler 类 对需要发送的请求进行统一管理
  • 类中配置最大并发数 “max”,并记录正在执行的请求数目 “count”
  • 通过 await + Promise 对超出限制数量时的请求进行阻塞
  • 当正在执行的请求完成后,按顺序对阻塞的请求进行放行

代码实现:

模拟请求

function sleep(val, time) {
    return new Promise(reslove => {
        setTimeout(() => {
            reslove(val)
        }, time)
    })
}
function addTask(val, time) {
    return () => sleep(val, time).then(result => {
        console.log(result);
        return result
    })
}

Scheduler类实现:

class Scheduler {
    constructor(max) {
        this.max = max    // 记录支持并发的任务数量
        this.count = 0    // 当前正在执行的任务数
        this.stack = []   // 使用队列保存被阻塞任务
    }

    async add(fun) {
        // 当正在执行的任务个数大于最大并发数时:使用await阻塞该请求的发送,记录 reslove 到 stack 下   
        // 待执行中的任务完成后按顺序对 stack 中的阻塞任务放行
        if (this.count >= this.max) {
            await new Promise(reslove => this.stack.push(reslove))
        }
        this.count = this.count + 1
        let result = await fun()
        this.count = this.count - 1
        if (this.stack.length) this.stack.shift()()
        return result
    }
}

效果测试:文章来源地址https://www.toymoban.com/news/detail-541589.html

const scheduler = new Scheduler(2)
scheduler.add(addTask(1, 1000))
scheduler.add(addTask(2, 500))
scheduler.add(addTask(3, 400))
scheduler.add(addTask(4, 200))
// 打印 2 3 1 4

提示:文章到此结束,文章为个人学习记录,侵删。

到了这里,关于如何限制请求的并发数量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高并发服务器的限制有哪些,如何提高并发量

    目录 前言 并发量限制因素 (五元组) 准备 测试并发量 思考局限 如何打破 超时连接问题何在 connection timeout的解决办法 实际开发中的处理方案 文章小结 本文纯粹就是小杰学习后端服务器开发的一个学习笔记系列. 小杰会尽量地将其梳理清楚, 大家一起学习,共同进步, 知识不

    2024年02月09日
    浏览(27)
  • Axios基本使用,为学习后续的Vue服务【发送请求+并发请求+前端拦截器】

    目录 1、项目中引入Axios 2、使用Axios发送请求 2.1、例:发送GET请求 2.2、例:发送POST请求 3、axios并发请求 4、拦截器 注:个人学习笔记,因自己学过后端,所以有关后端的代码,我在这里就不展示了~ 不了解后端的宝子,也不会耽误学习,因为公司里会有写好的接口文档,直

    2024年02月02日
    浏览(40)
  • Linux下 TCP 连接限制如何解除,解决socket高并发连接数限制,tcp默认1024个连接

    苏州私有云 当用户使用Linux作为系统时,socket在运行高并发的TCP程序时,可能会遇到连接数量到一定个数后被阻断的情况 我在工作的时候,测试高并发tcp程序(GPS服务器端程序),经过多次测试之后,发现每次建立的连接到达1000个左右 就再也不能建立tcp连接,然后在互联网

    2024年02月16日
    浏览(90)
  • 前端网络请求之JavaScript XHR、Fetch、Axios

    AJAX:一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。在不重新加载整个网页的情况下,对网页的某部分进行更新 Fetch:基于 promise 设计的。Fetch 的代码结构比起 ajax 简单多。fetch 不是 aj

    2024年01月23日
    浏览(33)
  • Postman 并发测试入门指南:如何模拟用户并发请求?

    最近,我们发起了一个在线图书管理系统的项目。我负责的一个关键模块包括三个主要后台接口: 实现对 books 数据的检索。 实施对 likes 数据的获取。 通过 collections 端点访问数据。 应对高流量的挑战 在设计并部署接口时,我们不可避免地需要考虑关键的问题: 你制作的产

    2024年02月03日
    浏览(27)
  • Elasticsearch索引数量限制

    Elasticsearch的索引可以无限创建吗? Elasticsearch 7.9.1 Elasticsearch启动 Elasticsearch启动采用默认配置 代码 使用SpringBoot编写测试代码,对ES进行索引创建测试。 SpringBoot连接配置 测试类代码 单机测试,设置每个索引占用4个分片,0个副本,先创建1000个索引进行测试,是否能创建成功

    2023年04月08日
    浏览(35)
  • ES设置最大查询条数限制,打破限制,聚合分组数量限制打破

    ​ 今天在做 ElasticSearch 进行查询的时候发现,在进行分页的时候,数据超出10000以后得页数,查询的时候会报错。后查询了 es 官方文档发现,查询数量的默认值是 10000 ; 官网链接:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/index-modules.html#dynamic-index-settings 报错内容: 在

    2024年02月03日
    浏览(27)
  • ElasticSearch 10000条查询数量限制

    我们将库存快照数据导入ES后发现要分页查询10000条以后的记录会报错,这是因为ES通过index.max_result_window这个参数控制能够获取数据总数from+size最大值,默认限制是10000条,因为ES考虑到数据要从其它节点上报到协调节点如果搜索请求的数据越多,会导致ES协调节点占用的堆内

    2024年02月06日
    浏览(29)
  • 【前端面试】中大文件上传/下载:中等文件代理服务器放行+大文件切片传输+并发请求+localstorage实现断点续传

    目录 切片上传~spark-md5 原理:流式计算+分块处理 文件标识spark-md5:A-B A.切片哈希值合并 B.首尾切片+其他切片前中后各取2M 计算hash:A-B(参考React的Fiber架构) A.线程:web-worker B.空闲:requestIdleCallback 异步并发控制:A-B(参考http2的多路复用) A.promise.allSettled() B.并发数max=

    2024年02月12日
    浏览(40)
  • MySQL的字段数量以及长度限制

    行格式 紧凑的存储特性 增强的可变长度列存储 大型索引键前缀支持 压缩支持 支持的表空间类型 REDUNDANT N N N N system, file-per-table, general COMPACT Y N N N system, file-per-table, general DYNAMIC Y Y N N system, file-per-table, general COMPRESSED Y Y Y Y file-per-table, general 开发中常用的是DYNAMIC行格式,这里

    2024年02月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包