Задать вопрос
@brainplus

Как ожидать инициализации в nodejs при обработке первого запроса?

Есть сервер на nodejs. При старте ему надо читать данные из разных источников, это занимает несколько секунд.

Хочется чтобы он начал слушать порт сразу при старте, а при обработке первого запроса чтобы он ждал пока закончится инициализация. Чтобы клиенты для отваливались из-за того что на порту никто не слушает..

Сейчас код вот такой и сервер начинает слушать запросы только после этой долгой инициализации long_init_operation():
long_init_operation(); //выполняется 2-5 секунд
const app = express();
app.get('/api/blah', async (req, res) => {
   //do someting
    res.statusCode = 200;
    res.end();
})
app.listen(3005, () => { })


как переписать код чтобы сервер начал слушать порт сразу же, и ждал окончания long_init_operation() при обработки первого запроса?

Спасибо за ответы заранее!
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Если long_init_operation синхронная, то она всё равно заблокирует выполнение и запросы обрабатываться не будут. Как вариант - перезапускать инстансы кластера по очереди, уведомляя управляющий процесс по мере готовности, тогда пока 1 инстанс запускается остальные будут обрабатывать запросы.

Если же можно сделать инициализацию асинхронной, то можно резолвить промис по её завершении, а в запросах ждать его резолва
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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