Работа с очередями с помощью npm — модуля kue. Правильно ли я понял смысл?

Создаю веб-приложение с помощью Express. С помощью модуля phantomjs делаю скриншоты сайта (в дочернем скрипте 'phantom-script.js'), затем из этих изображений, вызывая функцию generate_video, создаю видео.
app.get('/', function (req, res) {
  	var url = req.query.presentation;
  	var reg_url_base = new RegExp("http/");
  	//name of folder where will save screensots of site
	var name_folder = url.replace(reg_url_base, '');
  	var type = req.query.format;
  	var childArgs = [
  		path.join(__dirname, 'phantom-script.js'),
  		duration,
  		url,
  		FPS,
  		name_folder
	]
  	childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
		generate_video(res,type,name_folder);
	})
});

app.listen(3000, function () {
	console.log('Example app listening on port 3000!');
});

функция генерации видео
function generate_video(res,type,name_folder){
	////код создания видео, неважно
	res.json('Файл создавался ' + function_time + 'ms' + ', ' + 'местоположение: video_output/' + name_folder+'.' + type);
}

Нужно сделать так, чтобы сервер не создавал одновременно больше, например, 5 видео.
Для этого хочу использовать модуль Kue
Я понял так:
создаем job и задание для этого job
app.get('/', function (req, res) {
  	/*............*/
  	childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
                var job_video_creationg = queue.create('video_creating', {
		    title: 'creating_video',
		    }).save( function(err){
			if(err) console.log( 'error in creating of job with id' + job_video_creationg.id );
		});
               queue.process('video_creating', 200, function(job_video_creationg, done){
	                    generate_video(res,type,name_folder, done);
                });
	})
});

В функцию generate_video передали параметр done, выполняем его в конце функции:
function generate_video(res,type,name_folder, done){
	//генерация видео
	res.json('Файл создавался ' + function_time + 'ms' + ', ' + 'местоположение: video_output/' + name_folder+'.' + type);
	done();
}

Правильно ли я вообще понял, как оно работает? (видимо нет, так как после одного запроса и создания видео, при следующем запросе сервер падает)
  • Вопрос задан
  • 925 просмотров
Решения вопроса 1
pomeo
@pomeo
Неправильно. Зачем queue.process внутри роута? Какой смысл в этом?
Если находясь в / нажать 200 раз F5 как думаете, что будет? Куда эти все res.json ответят?
Ответа внутри job process быть не должно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы