首页 > 其他分享 >全栈的自我修养 ———— js如何处理并发的大量请求??

全栈的自我修养 ———— js如何处理并发的大量请求??

时间:2024-03-17 13:59:00浏览次数:21  
标签:index urlArr const 请求 js 并发 全栈 resArr

假如一个事件段内传过来一百多个请求,我们该处理大量并发请求呢

过程实现

定义一个方法,这个方法会放入你在这个时间段接收到的请求,这里100位例!
        const urlArr = []
        function distributeUrl(params) {
            for(let i = 0;i< params;i++){
                urlArr.push(`http://localhost:8080/text`)
            }
        }
        distributeUrl(100)
        
声明一个处理请求的方法,接受一个事件段里面的请求数组
然后sum就是你允许的最大并发量
        function handleTask(urlArr,sum){
            return new Promise((resolve) => {
            // 如果这个时间段数组为零就返回
                if (urlArr.length === 0){
                    resolve()
                }
                const resArr = [];
                let index = 0;
                
                async function request(){
                // 在此期间为了提高效率,我们还可以分给多个服务器 
                // 如果完成了就返回
                    if (index >= urlArr.length){
                        return
                    }
                    const nowIndex = index
                    const url = urlArr[index]
                    index++
                    // 如下可以返回这个请求数组里面的每一个请求的请求结果
                 	// 然后汇聚到一个resArr上
                 	// 一次循环后继续进行下次循环
                    try {
                        const res = await fetch(url)
                        resArr[nowIndex] = res.status
                    } catch (error) {
                        console.log(error);
                        resArr[nowIndex] = '错误'
                    } finally {
                        console.log(resArr);
                        request()
                    }
                }
                for (let i = 0; i < sum; i++) {
                    request()
                }
            })
        }

验证

假如现在允许的并发量为4,有一百个请求!

在这里插入图片描述

假如现在允许的并发量为1,有一百个请求!

在这里插入图片描述

源码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        const urlArr = []
        function distributeUrl(params) {
            for(let i = 0;i< params;i++){
                urlArr.push(`http://localhost:8080/text`)
            }
        }
        distributeUrl(100)
        
        function handleTask(urlArr,sum){
            return new Promise((resolve) => {
                if (urlArr.length === 0){
                    resolve()
                }
                const resArr = [];
                let index = 0;
                async function request(){
                    if (index >= urlArr.length){
                        return
                    }
                    const nowIndex = index
                    const url = urlArr[index]
                    index++
                    try {
                        const res = await fetch(url)
                        resArr[nowIndex] = res.status
                    } catch (error) {
                        console.log(error);
                        resArr[nowIndex] = '错误'
                    } finally {
                        console.log(resArr);
                        request()
                    }
                }
                for (let i = 0; i < sum; i++) {
                    request()
                }
            })
        }
        // 第一个参数传递地址数组,第二个参数最大并发数
        handleTask(urlArr,4)
    </script>
</body>
</html>

标签:index,urlArr,const,请求,js,并发,全栈,resArr
From: https://blog.csdn.net/2401_82752568/article/details/136781052

相关文章

  • Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存
    Java内存优化、线程安全与并发框架:综合面试题解析Java作为一种广泛使用的编程语言,其内存管理、多线程和并发处理是开发者必须掌握的核心技能。为了全面评估候选人在这些领域的知识水平和实际应用能力,我们设计了一道综合性的面试题。本文将对这道题目进行深入分析,从核心知识......
  • Java面试题:详解单例模式与内存泄漏?内存模型与volatile关键字的实操?并发工具包与并发框
    Java核心技术:设计模式、内存管理与并发编程深度解析在Java技术领域,设计模式、内存管理和并发编程是构建高效、稳定系统的关键。本文将通过三道综合性面试题,深入探讨这些核心知识点,帮助读者理解其背后的原理,并在实际编程中避免常见错误。面试题一:单例模式与内存泄漏问题核......
  • 微信小程序uniapp+vue+nodejs宝宝成长记录系统的设计与实现
    本文先通过对相关系统的调研,提出开发基于微信小程序的宝宝成长记录系统的意义,然后使用当前主流的技术进行开发,满足基于微信小程序的宝宝成长记录系统的技术要求,分析系统需要实现的功能并进行设计。梳理业务流程,并根据功能设计数据库,最后通过编码实现,介绍实现的关键算法逻辑。在......
  • C++ 简单使用Json库与muduo网络库
    C++简单使用Json库与muduo网络库C++使用Json库测试代码均在Ubuntu20上运行首先下载json.hpp的代码链接然后和你的测试代码放在同一目录下面导入方式#include"json.hpp"usingjson=nlohmann::json;json序列化代码测试1voidtest1(){jsonjs;js["id"]={1......
  • 智能酒店管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着科技的进步和旅游业的繁荣,酒店行业正面临着前所未有的机遇与挑战。为了提高服务质量、运营效率以及顾客满意度,智能酒店管理系统应运而生。这种系统利用......
  • 灾情信息管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着自然灾害频发,及时有效的灾情信息管理对于灾害应对和救援工作至关重要。一个专业的灾情信息管理系统能够帮助政府和救援组织快速收集、处理和分析灾区数......
  • 智慧教室预约(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着教育数字化转型的深入,智慧教室成为提升教学质量和效率的重要环境。智慧教室预约系统能够有效管理教学资源,实现教室使用的优化配置,确保设备高效利用。它......
  • js面试(this指向)
    一、全局下的this浏览器环境指向window,Node环境指向Globalconsole.log(this);//Window二、对象调用谁调用指向谁varobj={num:0,fun(){console.log(this);//{num:0,fun:ƒ}指向obj对象},};obj.fun();三、独立调用浏览器环境指向windo......
  • 纯前端实现 PNG 图片压缩 | UPNG.js
    在线Demo体验地址→:https://demos.sugarat.top/pages/png-compress/前言最近在迭代自己的图床应用,由于使用时间的累计,存储空间占用越来越大了,在做Web应用的时候会随手拿tinypng压缩一下图片。想着给咱图床也加个压缩的功能,这样上传/访问也能省点......
  • JS实现之用户注册协议倒计时
    要求:按钮显示5秒倒计时,5秒前禁点,5秒后可以点击按钮运行结果:5秒前5秒后思路开启禁用按钮属性disabled获取按钮元素开启倒计时函数setInterval调用函数,函数里包括变量自减,使用DOM对象修改时间,关闭按钮禁用属性HTML代码:首先禁用按钮属性<textareaname=""id=""......