私は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ブラウザを起動しますと、ウェブサイトをロードしますので、RAMの使用量は、600〜700メガバイト件まで急上昇することができ、そしてラムは、サーバー上で高価であるとして、したがって、私は非同期的に、このコマンドを実行することはできません。
着信要求をキューに入れてFIFO形式で実行できるかどうかは分かりますか?
kue、bull、bee-queuesのようなパッケージをチェックしようとしましたが、キューが開始される前にジョブリストがすでにわかっていると思います。私のジョブリストはサイトを使用するユーザーに依存します。また、キューに入っていて、自分の番を待つ必要があることを人に伝えます。上記のパッケージで可能ですか?
私はこの問題を解決するためにkueとsociet.ioを使用しました。 –