HTTP потоковая передача на Heroku (загрузка большого количества данных)
У меня есть одно приложение, размещенное на Heroku, и это приложение сохраняет большое количество информации в базу данных (это занимает около 70 секунд).
Heroku после 30-секундного периода каждого запроса отображает страницу ошибки H12 об истечении времени ожидания. Как я могу отобразить некоторое информационное сообщение во время загрузки вместо отображения ошибки H12?
Я искал какой-то пример этого, но я не добился особого успеха... Я просто нашел несколько заметок, которые мне приходится каждый раз отправлять (например, 15 секунд) некоторую управляющую строку с сервера, но я уже не найти конкретный пример, как это сделать...
Любые советы, как это сделать?
Заранее спасибо.
1 ответ
Плохо практиковать, чтобы ваши пользователи ждали запрос в течение 70 секунд на любой платформе. Heroku просто применяет эту лучшую практику, используя 30-секундный тайм-аут. Поэтому реальный вопрос заключается в том, как лучше спроектировать приложение.
В Heroku есть статья о внедрении фоновых рабочих, которые предназначены для решения этой самой проблемы: https://devcenter.heroku.com/articles/queueing
Основной подход заключается в том, чтобы веб-запрос планировал фоновое задание (используя "Задержка задания", "Классическая очередь", "Возврат" и т. Д.) И немедленно отвечал пользователю некоторым индикатором прогресса. Затем динам, работающий в фоновом режиме, выполняет тяжелую работу по сохранению информации в БД. Когда это сделано, он переворачивает некоторый флаг в БД или другом механизме хранения, который уведомляет веб-клиента о том, что задание завершено.
Запуск фонового работника требует другого dyno. Если вы хотите избежать этих расходов, вы можете посмотреть на Girl Friday, с которой многие сообщают об успехе.
Надеюсь, это поможет.