gpt4 book ai didi

javascript - 如何在 Node.JS 中限制(或排队)对外部进程的调用?

转载 作者:数据小太阳 更新时间:2023-10-29 04:15:09 24 4
gpt4 key购买 nike

场景

我有一个 Node.JS 服务(使用 ExpressJS 编写)接受通过 DnD ( example ) 上传的图像。上传图片后,我会对其执行一些操作:

  1. 从中提取 EXIF 数据
  2. 调整大小

这些调用正在通过 node-imagemagick 处理模块,我的代码看起来像这样:

app.post('/upload', function(req, res){
... <stuff here> ....

im.readMetadata('./upload/image.jpg', function(err, meta) {
// handle EXIF data.
});

im.resize(..., function(err, stdout, stderr) {
// handle resize.
});
});

问题

正如你们中的一些人已经发现的那样,问题是如果我获得足够多的同时上传,这些上传中的每一个都会产生一个“身份”调用,然后是一个调整大小操作(来自 Image Magick),有效地杀死服务器加载。

只需使用 ab -c 100 -n 100 进行测试就会锁定我的小型 512 Linode 开发服务器,这样我就必须强制重启。我知道我的测试可能对服务器来说负载太大,但我想要一种更强大的方法来处理这些请求,这样我就会有一个比完全 VM 自杀更优雅的失败。

在 Java 中 solved this issue通过创建一个固定线程的 ExecutorService 来排队工作并在最多 X 个线程上执行它。

在 Node.JS 中,我什至不确定从哪里开始解决这样的问题。我不太了解非线程性质以及如何创建异步 JavaScript 函数来对工作进行排队,而另一个...(线程?)处理队列。

任何关于如何思考这个问题或如何处理这个问题的建议都将不胜感激。

附录

这与 this question about FFMpeg 不同,虽然我想这个人会在他的 webapp 加载时遇到这个完全相同的问题,因为它归结为相同的问题(并行触发太多同时的 native 进程)。

最佳答案

threads 模块应该正是您所需要的:

https://github.com/robtweed/threads

关于javascript - 如何在 Node.JS 中限制(或排队)对外部进程的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7290236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com