Как выдать асинхронность за синхронность под NGINX?

Веб-сервис, NGINX, php-fpm — генерящий, для примера, картинки.
Редкие запросы на /create создают асинхронную задачу, которая попадает в (пустую) очередь и быстро выполняется отдельным воркером (1 или несколькими).

В обычном сценарии, запрос мгновенно отдаёт номер задачи. И потом другим методом /result можно запрашивать результат выполнения этой задачи – получить ответ «ещё не готово» или получить URL сгенеренной картинки.

Как можно было бы при таком сценарии сделать задержку мгновенного ответа на некий таймаут, скажем, 500ms. Если под конец этого времени задача уже выполнена – сразу вернуть её результат (URL). А если всё ещё нет — то номер задачи для последующих запросов результата?

Пока только задумался над такой возможностью. Вот есть модуль "echo" для NGINX, позволяющий «поспать» без блокировки N секунд перед отдачей ответа директивой echo_sleep. Может, на нём попробую. Кто-нибудь делал похожую механику?

В идеале, конечно, не спать именно 500ms, а по готовности задачи через событие как-то возвращать ответ.

Как бы NGINX должен принять запрос и сразу передать его в php-fpm, но далее не сразу отдавать ответ, а подождать (события или таймаута) и вернуть ответ из другого уже url.
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
karabanov
@karabanov
Системный администратор
Nginx тут не причём, этот функционал надо реализовать в приложении.
Ответ написан
Ваш ответ на вопрос

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

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