2016-02-18 3 views
0

Я создаю приложение, которое включает в себя запуск некоторых запаздывающих задач, то, как следующие:NodeJS приложение с большим количеством времени ожидания

app.get('/doit', function(req, res) { 
    var timeout = 1000*60*60*8; // timeout between 1 hour and several days 
    var task=setTimeout(function(){ 
     console.log('doing delayed task...'); 
    },timeout); 
    res.render('index.ejs'); 
}); 

Вопрос: будет ли это влиять на производительность, если есть много таких задач? (несколько тысяч и более)

Есть ли лучший способ сделать это?

+1

У меня есть ощущение, что вы должны использовать cron вместо этого - взгляните на https://www.npmjs.com/package/cron –

+0

Возможно, вас беспокоит несколько непреднамеренных запросов. Современные браузеры могут получить доступ к '' '/ doit''' при наборе текста или если это закладка, например. для предварительной загрузки или аналогичных функций. Это приведет к многократной планировке вашей отложенной задачи. –

+0

Я буду использовать пост-запросы с дополнительными данными, поэтому это не должно быть проблемой. app.get(); только, например. В любом случае, спасибо - я буду учитывать это в будущем :) – Viktor

ответ

3

nodejs - это событие, поэтому вам не о чем беспокоиться.

0

Его вряд ли вызовут какие-либо серьезные проблемы с производительностью, если количество таких задач действительно действительно велико, но тогда все равно будут проблемы с производительностью. Лучшее решение вашей проблемы зависит от того, чего вы пытаетесь достичь. Это поможет, если вы сможете предоставить некоторые детали.

В случае, если вы хотите запустить задачу периодически, было бы лучше использовать cron .Прите вы просто ждете какое-то событие произойдет, то я хотел бы предложить вам использовать node events. В любом случае, все еще есть много вещей, где setTimeout по-прежнему является лучшим доступным решением, в этом случае, продолжайте использовать его.

+0

Приложение - это своего рода игра. Например, инициированное пользователем строительство дома и эта конструкция занимают 8 часов. Таким образом, это не периодическая, а просто отсроченная реакция на действия пользователя. – Viktor

+0

Я не думаю, что неплохо использовать nodejs для разработки игр. Nodejs не идеален для интенсивных вычислительных задач. Хотя у меня нет опыта разработки игр, но я думаю, что такие задачи обычно выполняются с помощью C/C++. Вы можете использовать nodejs для связи между игроками, но не для реальной обработки в игре. Что касается вашего сценария, я уверен, что есть лучшие доступные решения. Использование setTimeout будет работать отлично для меньшего, менее используемого приложения, но не будет хорошо масштабироваться. –

+0

Я думал о C++, но из-за моего плохого опыта это займет много времени (кроме того, я бы сказал, что эта идея - это просто так называемая игра - она ​​не включает никаких динамических вычислений, просто математика. , если он имеет большой успех, я переведу его на ядро ​​C++). – Viktor

Смежные вопросы