Javascript 如何在NodeJS中限制跨多个请求的函数调用?
我正在使用NodeJS运行后端服务器。后端拥有一个向外部API发出请求的函数。由于外部API提供程序对常量请求不太满意,因此我需要限制向该外部API发出请求的函数。我目前的解决方案是使用这个库 使用该库,我可以定义在一定时间内调用特定函数的频率限制(也可以限制执行特定函数的并发实例的数量)。只有一个缺点:我既不能访问也不能更改“等待”函数调用的队列,这意味着一个客户端基本上可以发出大量请求,并阻止其他客户端的函数 有没有一种方法可以在NodeJS中为函数调用实现队列排序?如果其他客户也提出请求,我需要考虑到这一点,并以某种方式混合执行顺序以再次公平(而不是先进先出/先到先得) 这是我当前设置的瓶颈,但如上所述,行为是FIFO,因此其他客户端被“阻止”Javascript 如何在NodeJS中限制跨多个请求的函数调用?,javascript,node.js,rest,concurrency,Javascript,Node.js,Rest,Concurrency,我正在使用NodeJS运行后端服务器。后端拥有一个向外部API发出请求的函数。由于外部API提供程序对常量请求不太满意,因此我需要限制向该外部API发出请求的函数。我目前的解决方案是使用这个库 使用该库,我可以定义在一定时间内调用特定函数的频率限制(也可以限制执行特定函数的并发实例的数量)。只有一个缺点:我既不能访问也不能更改“等待”函数调用的队列,这意味着一个客户端基本上可以发出大量请求,并阻止其他客户端的函数 有没有一种方法可以在NodeJS中为函数调用实现队列排序?如果其他客户也提出请求,
工作瓶颈不适合你的需要吗?当用户提交多个作业时,将其优先级提高到队列中当前作业的数量(直到9个)?好的,只有一种。在某些情况下,客户端可能会发出成百上千的请求,如果请求的数量如此之大,那么10种不同的优先级根本不足以分散负载,以防止客户端长时间阻塞功能。作业瓶颈提供的服务不适合您的需要吗?当用户提交多个作业时,将其优先级提高到队列中当前作业的数量(直到9个)?好的,只有一种。在某些情况下,客户端可能会发出成百上千的请求,如果请求的数量如此之大,那么10种不同的优先级根本不足以分散负载,从而防止客户端阻塞功能太长时间。
const Bottleneck = require("bottleneck");
const limiter = new Bottleneck({
minTime: 1000,
});
router.post("/", async (req, res) => {
...
const result = await requestHandler(xml, 0);
async function requestHandler(xml, recursionCounter) {
...
result = await limiter.schedule(() => soapRequest(URL, xml));
...
}
}
async function soapRequest(url, xml) {...}