Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js:使用aync函数或基于队列的工作程序运行外部流程任务?_Node.js_Web Worker - Fatal编程技术网

Node.js:使用aync函数或基于队列的工作程序运行外部流程任务?

Node.js:使用aync函数或基于队列的工作程序运行外部流程任务?,node.js,web-worker,Node.js,Web Worker,我有以下功能来调整图像大小并上传到S3(使用“gm”和“knox”): 如果我处理许多并发请求,可能会产生许多GraphicsMagick进程,实现基于队列的工作进程来处理图像并生成受控数量的进程是否是更好的做法?在队列中管理这一点绝对更好。您不希望最终用户能够因为请求的数量而使您的服务停止,并且当您不排队等待高CPU操作时,DOS攻击变得微不足道。我甚至会考虑把GraceSmigCK代码放到不同的服务器/服务器上,这样就可以很容易地独立于HTTP代码来缩放它们。有没有好的库来管理这样的工人?

我有以下功能来调整图像大小并上传到S3(使用“gm”和“knox”):


如果我处理许多并发请求,可能会产生许多GraphicsMagick进程,实现基于队列的工作进程来处理图像并生成受控数量的进程是否是更好的做法?

在队列中管理这一点绝对更好。您不希望最终用户能够因为请求的数量而使您的服务停止,并且当您不排队等待高CPU操作时,DOS攻击变得微不足道。我甚至会考虑把GraceSmigCK代码放到不同的服务器/服务器上,这样就可以很容易地独立于HTTP代码来缩放它们。

有没有好的库来管理这样的工人?
var http = require('http');
var https = require('https');
var s3 = require('./s3');
var gm = require('gm');
var fs = require('fs');

module.exports.processImageUrl = function(imageUrl, filename, callback) {
    var client = http;
    if (imageUrl.substr(0, 8) == 'https://') { client = https; }

    client.get(imageUrl, function(res) {
        if (res.statusCode != 200) {
            return callback(new Error('HTTP Response code ' + res.statusCode));
        }

        gm(res)
            .geometry(1024, 768, '>')
            .stream('jpg', function(err, stdout, stderr) {
                if (!err) {
                    var file = fs.createWriteStream(__dirname + '/../tmp/' + filename + '.jpg');

                    stdout.pipe(file);

                    stdout.on('end', function() {
                        fs.stat(__dirname + '/../tmp/' + filename +'.jpg', function(err, stats) {
                            if (!err) {
                                var headers = {
                                    'Content-Length': stats.size
                                    ,     'Content-Type': 'Image/jpeg'
                                    , 'x-amz-acl': 'public-read'
                                };

                                var file = fs.createReadStream(__dirname + '/../tmp/' + filename + '.jpg');

                                s3.putStream(file, '/img/d/' + filename + '.jpg', headers, function(err, res) {
                                    if(err) {
                                        return callback(err);
                                    } else {
                                        fs.unlink(__dirname + '/../tmp/' + filename + '.jpg');
                                        return callback(null, res.client._httpMessage.url);
                                    }
                                });
                            }
                        });
                    });
                } else {
                    callback(err);
                }
            });
    }).on('error', function(err) {
            callback(err);
        });
};