限制数量请求池函数实现

Posted PatWu16

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了限制数量请求池函数实现相关的知识,希望对你有一定的参考价值。

// function createRequestPool(poolSize) {
// }

// const request = createRequestPool(3);
// for (let i = 0; i < 10000; i++) {
//   request(\'/count\').then(xxxx).catch(xxx)
// }

/**
 * 记笔记,待验证
 */
function createRequestPool(poolSize) {
  const reqs = [];
  const temps = [];

  return function (url) {

    function runTask() {

      // 循环添加到临时数组中
      while (reqs.length && temps.length < poolSize) {
        temps.push(reqs.shift());
      }

      // 遍历临时数组,发起请求
      for (let i = 0; i < temps.length; i++) {
        fetch(temps[i].url)
          .then((data) => {
            // 移除当前请求,并返回结果
            temps.splice(temps.indexOf(temps[i]), 1);
            temps[i].resolve(data);

            // 每完成一个,就需要执行队列中的任务
            runTask();
          })
          .catch((err) => {
            // 移除当前请求,并返回结果
            temps.splice(temps.indexOf(temps[i]), 1);
            temps[i].reject(err);
          });
      }
    }

    return new Promise((resolve, reject) => {
      reqs.push({
        url,
        resolve,
        reject
      });

      runTask();
    });
  }
}

以上是关于限制数量请求池函数实现的主要内容,如果未能解决你的问题,请参考以下文章

限制请求数量函数

aiohttp 异步http请求-8.TCPConnector限制连接池的大小

在应用程序生命周期内创建的最大线程池数量是不是有限制?

详解multiprocessing多进程-Pool进程池模块

Android 多线程下载,断点续传,线程池

ExecuterService实现线程池1