Вместо того, чтобы выполнять всю работу, инициированную запросом, прежде чем ответить вообще:
- Получите запрос
- Поместите информацию в запрос в очередь (которой вы можете управлятьс таблицей базы данных, ZeroMQ или чем-либо еще, что вам нравится)
- Ответьте сообщением «Запрос получен».
Таким образом, вы отвечаете в течение нескольких секунд, что приемлемо для HTTP.
Затем попросите отдельный процесс отслеживать очередь и обрабатывать данные в ней (продолжительностью 30-40 минут).работа).Когда работа будет завершена, уведомите пользователя.
Вы можете сделать это через браузер с Уведомлением или через WebSocket или использовать совершенно другой механизм (например,как, отправив электронное письмо пользователю, который сделал запрос).