全栈的自我修养 ———— 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>
相关推荐
djarmy8 小时前
MAIN.c(1): warning C318: can’t open file ‘STC8G.H’ 报错 解决 分析
c语言·开发语言·mongodb
HEJOO98 小时前
深入理解 Java volatile 关键字:原理、用法与常见误区
java·开发语言·spring
曹牧8 小时前
Java:no content to map due to end of input
java·开发语言
梦梦代码精8 小时前
《回收租赁系统技术选型避坑指南:业务闭环与二开自由度详解》
开发语言·低代码·docker·开源·代码规范
隔窗听雨眠8 小时前
记一次SQL Server数据库性能分析:从CPU100%到单配置修复的完整诊断
开发语言·数据库·php
David猪大卫9 小时前
【C++修炼】智能指针使用及原理
开发语言·c++·经验分享·笔记·学习·考研·面试
charlie1145141919 小时前
现代Qt开发之图像处理进阶:像素操作与格式转换
开发语言·图像处理·qt
李永奉9 小时前
中科蓝讯SDK开发-BT893x 面条耳机连接vivo手机后连接APP端,最后手机端设置页面手动断开蓝牙连接,此时耳机端假断开
c语言·开发语言·嵌入式硬件·物联网·智能手机·电脑
lemon_sjdk9 小时前
DOM 节点
java·前端·javascript
leoZ2319 小时前
2026-09-09-springboot-cloud-deploy-pitfalls
java·前端·javascript·vue.js·人工智能·spring boot·后端