javaScript完成高并发请求,可控制请求次数

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaScript完成高并发请求,可控制请求次数相关的知识,希望对你有一定的参考价值。

javascript完成高并发请求

源码:

/**
 * 并发请求
 * @param string[] urls 待请求的url数组
 * @param number maxNum 最大的并发数
 */
function concurRequest(urls, maxNum) 
    return new Promise(resolve => 
        if (urls.length === 0) 
            /* 先考虑边界问题 */
            resolve([]);
            return;
        
        const results = [] //存储请求结果并返回
        let index = 0; //下一个请求的url下标
        let count = 0; //计算请求的数量

        async function request() 
            if (index === urls.length) 
                return;
            
            const i = index;
            const url = urls[index];
            index++
            try 
                // let ret = await (await fetch(url)).text();
                let ret = await fetch(url);
                results[i] = ret //不能用push,因为这样就会出现异步完成优先写入不符合要求。
             catch (error) 
                results[i] = err
             finally 
                count++
                if (count === urls.length) 
                    resolve(results);
                
                request();
            

            // console.log(ret);
            // console.log(url);
            console.log(results);
        
        
        const times = Math.min(maxNum,urls.length);
        for(let i=0;i<times;i++)
            request();
        
        
    )

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>并发请求</h1>
    <script src="./index.js"></script>
    <script>
        const urls = [];
        for(let i=1;i<=100;i++)
            urls.push(`https://api.uixsj.cn/hitokoto/get?tyoe=social/$i`)
        
        concurRequest(urls,20).then(ret=>
            console.log(ret);
        )
    </script>
</body>
</html>

以上是关于javaScript完成高并发请求,可控制请求次数的主要内容,如果未能解决你的问题,请参考以下文章

nginx浅析4-限流(秒杀,高并发)

如何处理高并发量的HTTP请求

大数据高并发---负载均衡

大数据高并发---负载均衡

Nginx并发请求过高导致请求超时的问题

Jmeter -- 循环控制器 -- 控制请求执行次数