3

我尝试了两个不同的库:multerformidable用于处理节点中的文件上传,并且它们在上传期间都使用 100% CPU。

这是一个常见的节点问题吗?以及人们在高并发环境下是如何处理的?

节点版本:(v0.10.36我什至尝试过其他版本,如v0.11.xv0.10.33

令人敬畏的例子

Picture.upload = function(user, req, cb) {
    var formidable = require('formidable')

    var form = new formidable.IncomingForm();
    form.uploadDir = "./uploads";
    form.maxFieldsSize = app.settings.uploadMaxSize * 1024 * 1024;
    form.maxFields = 1000;

    form.parse(req, function(err, fields, files) {
        cb(null, files);
    });
}

多重例子

app.use(multer({ dest: './uploads/',
    rename: function (fieldname, filename) {
       return filename+Date.now();
    },
    limits: {
       files: 1,
       fileSize: app.settings.uploadMaxSize * 1024 * 1024
    }
})); // after I process the file from req.files

文件上传为multipart/form-data.

我正在使用loopback,但我认为这没有任何区别。

4

1 回答 1

-1

在高并发环境中,如果某个任务使 cpu 达到 100%,遗憾的是节点会阻塞。我假设上传文件与提供静态资产的含义相同。这里有很多关于 nodejs 不适合提供静态内容的讨论。请改用 nginx 或 apache。

另一种解决方案是将上传委托给工作进程或排队系统。例如,参见ZMQ

于 2015-02-12T14:02:35.053 回答