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

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

过程实现

复制代码
定义一个方法,这个方法会放入你在这个时间段接收到的请求,这里100位例!
js 复制代码
        const urlArr = []
        function distributeUrl(params) {
            for(let i = 0;i< params;i++){
                urlArr.push(`http://localhost:8080/text`)
            }
        }
        distributeUrl(100)
        
复制代码
声明一个处理请求的方法,接受一个事件段里面的请求数组
然后sum就是你允许的最大并发量
js 复制代码
        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,有一百个请求!

源码

js 复制代码
<!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>
相关推荐
颜酱36 分钟前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919101 小时前
C++代码风格检查工具
开发语言·c++·算法
2501_944934731 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
小迷糊的学习记录1 小时前
Vuex 与 pinia
前端·javascript·vue.js
发现一只大呆瓜1 小时前
前端性能优化:图片懒加载的三种手写方案
前端·javascript·面试
黎雁·泠崖2 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
不爱吃糖的程序媛2 小时前
Flutter 与 OpenHarmony 通信:Flutter Channel 使用指南
前端·javascript·flutter
利刃大大2 小时前
【Vue】Element-Plus快速入门 && Form && Card && Table && Tree && Dialog && Menu
前端·javascript·vue.js·element-plus
NEXT062 小时前
AI 应用工程化实战:使用 LangChain.js 编排 DeepSeek 复杂工作流
前端·javascript·langchain
2301_763472462 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法