Я пытаюсь реализовать длинную стратегию опроса с помощью node.js
. Я хочу, чтобы, когда был сделан запрос к node.js, он ожидал максимум 30 секунд, пока некоторые данные не станут доступны.Если данные есть, он выведет их и выйдет, а если данных нет, просто подождет максимум 30 секунд, а затем выйдет.
Вот базовая логика кода, которую я придумал -
var http = require('http');
var poll_function = function(req,res,counter)
{
if(counter > 30)
{
res.writeHeader(200,{'Content-Type':'text/html;charset=utf8'});
res.end('Output after 5 seconds!');
}
else
{
var rand = Math.random();
if(rand > 0.85)
{
res.writeHeader(200,{'Content-Type':'text/html;charset=utf8'});
res.end('Output done because rand: ' + rand + '! in counter: ' + counter);
}
}
setTimeout
(
function()
{
poll_function.apply(this,[req,res,counter+1]);
},
1000
);
};
http.createServer
(
function(req,res)
{
poll_function(req,res,1);
}
).listen(8088);
То, что я представляю, когда делается запрос, вызывается функция poll_function, которая вызывает себя через 1 секунду, через setTimeout внутри себя.Таким образом, он должен оставаться асинхронным средством, он не будет блокировать другие запросы и предоставит свой вывод, когда это будет сделано.
Я использовал здесь логику Math.random () для имитации сценария доступности данных на различном интервале.
Теперь, что меня беспокоит -
1) Будет ли с этим какая-то проблема?- Я просто не хочу развертывать его, не будучи уверенным, что он не нанесет ответный удар!
2) Это эффективно?если нет, какие-либо предложения, как я могу улучшить это?
Спасибо,
Anjan