У меня есть приложение, которое использует Express в качестве пользовательской среды для моего REST API вместе с RabbitMQ для вызовов функций, подобных RPC, для кластерного бэкэнда. Кроме того, я использую Q, чтобы обещать всю свою нагрузку в Routes.
В одном из маршрутов, которые я использую, я запускаю некоторые функции, которые сканируют URL-адрес, указанный в параметрах маршрута, выполняют поиск GeoIP, нормализуют форматы результатов и т. д. Это может занять несколько секунд, в зависимости от времени отклика серверов просканированного URL-адреса.
Чего я хотел бы добиться, так это того, что пользователь, который отправляет новый URL-адрес для сканирования, получает немедленную обратную связь на свой запрос (статус 200 = «Запрос на сканирование подтвержден») и не ожидает запроса, ожидающего завершения сканирования.
Мои идеи либо
- Отправка URL-адреса в определенную очередь в RabbitMQ и наличие другого процесса для прослушивания заданий очереди
- Использование чего-то вроде дочерних процессов внутри Express Routes
Что было бы лучшим решением для решения этой проблемы? Спасибо за ваш ценный вклад.