javascript - nodejs express为繁重的路由/功能添加全局队列/节流并行执行
问题描述
在 node.js express 服务器上,我们有一个繁重的功能,它应该同时运行 X 次(占用太多 RAM)。有没有这方面的库/实现?
寻找类似于function-rate-limit的东西,但不是按时间限制,而是按全局并行执行限制。
其他呼叫应该排队,最好的情况是请求的时间限制为 30 秒。
我的第一个快速天真的实现是这样的:
function limitParallel(fn, maxParallel, ctx) {
const waitSomeMs = (ms) => new Promise((res) => setTimeout(res, ms));
let running = 0;
return async function() {
while (running > maxParallel) {
await waitSomeMs(100);
}
running++;
const result = await fn.apply(ctx || this, arguments)
running--;
return result;
}
}
// usage example
const heavyFn = () => new Promise((res) => setTimeout(res, 1000)).then(() => console.log('heavy done' + new Date()));
const limited = limitParallel(heavyFn, 2);
limited();
limited();
limited();
limited();
limited();
limited();
limited();
//only 2 console.logs at second
但是一些定性的库/实现会更好,因为这里有轮询和没有先进先出。
更新:
我找到的第一个解决方案:express-queue。谢谢@ikhvjs
解决方案
推荐阅读
- angular - npm install 后找不到模块“@angular-devkit/build-angular”
- android - 如何在Android XML布局中标记视图不需要layout_width和layout_height
- javascript - EXTJs 可见行
- javascript - 更新表单时,initialValues 没有得到更新
- csv - windows下使用cmd命令删除一个csv文件的第一行
- amazon-web-services - 是否可以将 IAM 角色与 Aurora 集群相关联?
- keycloak - Keycloak:忘记密码 JWT 解析错误
- php - 如何使用 php 代码和目录路径在服务器上创建 .dat 文件?
- java - 如何修复超出我的 java 代码范围的数组索引?
- centos - 创建符号链接导致 500 错误