axios -请求池实施

m1m5dgzv  于 2022-12-18  发布在  iOS
关注(0)|答案(1)|浏览(212)

我正在寻找一种方法来创建一个HTTP请求池,并有一个计时器,将发送他们每x秒。
我正在使用axios作为我的HTTP客户端,并想知道axios中是否有一个钩子来处理发送前的请求,将其保存在这个池中并立即解析,然后我的计时器将异步处理实际的请求。
我想象自己有这样的能力:

const pool = [];

setInterval(() => {
    const promises = [];
    while(pool.length){
        const { url, data, config } = pool.pop();

        delete config.usePool;

        // This request will be send to the server
        promises.push(axios.post(url, data, config);
    }

    await Promise.all(promises);
}, 5000);

// this `axios.hook` not really exists, im looking for a way to implement it (this is my actual question)
axios.hook = (url, data, config) => {
    if(config?.usePool){
        pool.push({ url, data, config });
    }
};

// This request won't send but save in the pool
const res = axios.post('/my/url', { a: 1, b: 1 }, { usePool: true });
dojqjjoe

dojqjjoe1#

对于大小为8的请求池,可以使用以下实现:

const axios = require('axios');
const { Agent } = require('https');

export default axios.create({
    httpsAgent: new Agent({
        maxSockets: 8
    })
});

您可以在此处找到https代理的更多配置选项:https://nodejs.org/api/http.html#new-agentoptions
没有一个选项可以按照您的期望及时地将请求间隔开,尽管这种方法的有用性是有争议的。

相关问题