Я написал сценарий в Nodejs, который снимает скриншот веб-сайтов (используя slimerJs
), этот скрипт занимает около 10-20 секунд, проблема в том, что сервер застопорился, пока этот скрипт не завершился.Как управлять очередью в nodejs?
app.get('/screenshot', function (req, res, next) {
var url = req.query.url;
assert(url, "query param 'url' needed");
// actual saving happens here
var fileName = URL.parse(url).hostname + '_' + Date.now() + '.png';
var command = 'xvfb-run -a -n 5 node slimerScript.js '+ url + ' '+ fileName;
exec(command, function (err, stdout, stderror) {
if(err){ return next(err); }
if(stderror && (stderror.indexOf('error')!= -1)){ return next(new Error('Error occurred!')); }
return res.send({
status: true,
data: {
fileName: fileName,
url: "http://"+path.join(req.headers.host,'screenshots', fileName)
}
});
})
});
Поскольку сценарий нерестится браузер Firefox в памяти и загружает веб-сайт, использование оперативной памяти может шип ДО 600-700mb, и, таким образом, я не могу выполнить эту команду асинхронно баран дорого на серверах.
Могу ли я узнать, возможно ли его поставить очередь входящих запросов и выполнить их в режиме FIFO?
Я пробовал проверять пакеты, такие как куэ, бык и очереди пчел, но я думаю, что все они предполагают, что список заданий уже известен до начала очереди, где, поскольку мой список заданий зависит от пользователей, использующих сайт, и я хочу также сообщают людям, что они находятся в очереди и должны ждать своей очереди. возможно ли это с вышеупомянутыми пакетами?
Я использовал kue и societ.io, чтобы исправить эту проблему, спасибо за помощь –