Ich habe ein Skript in Nodejs geschrieben, das einen Screenshot von Websites (mit slimerJs
), dieses Skript dauert etwa 10-20 Sekunden dauert, das Problem hier ist der Server ist blockiert, bis dieses Skript beendet ist.Wie man eine Warteschlange in Nodejs verwaltet?
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)
}
});
})
});
Da das Skript einen Firefox-Browser im Speicher laicht und lädt die Webseite, kann die RAM-Auslastung bis zu 600-700mb Spitze, und damit kann ich diesen Befehl nicht asynchron ausgeführt werden als ram teuer auf Servern ist.
kann ich wissen, ob es möglich ist, die eingehenden Anfragen in die Warteschlange zu stellen und sie in FIFO-Mode auszuführen?
Ich habe versucht, Pakete wie kue, bull und biene-queues zu überprüfen, aber ich denke, dass alle annehmen, dass die Jobliste bereits bekannt ist, bevor die Warteschlange gestartet wird, wo meine Jobliste von Benutzern abhängt, die die Site verwenden Sag den Leuten auch, dass sie in der Warteschlange sind und warten müssen, bis sie an der Reihe sind. Ist das mit den oben genannten Paketen möglich?
ich benutzte kue und societ.io, um dieses Problem zu beheben, danke für die Hilfe –