Поддержание веб-запроса - PullRequest
1 голос
/ 16 апреля 2010

У меня есть веб-приложение, которое помогает загружать отчеты. Но создание отчета иногда занимает много времени, и веб-запрос прерывается через промежуточный прокси-сервер (время ожидания: 90 секунд) Процесс загрузки отчета прост. Клиент отправляет запрос на веб-сервер. Веб-сервер создает отчет и делает его доступным для клиента при загрузке в формате Excel.
Excel генерируется с использованием POI, а загрузка осуществляется с использованием Spring's AbstractExcelView.
Что может быть лучшим способом сохранить живой веб-запрос (конечно, без увеличения времени ожидания)?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2010

Один из способов - заставить первоначальный запрос возвращать экран удержания с надписью «Мы генерируем отчет ...», включая токен запроса и JavaScript (обычно AJAX) для периодической передачи токена запроса обратно в веб-приложение, чтобы посмотрите, готов ли отчет, и отобразите его, когда он есть.

Если в коде веб-приложения есть какие-либо сведения о том, как далеко продвинулся отчет, об этом прогрессе можно сообщать и через AJAX.

Таким образом, на каждый запрос поступает ответ в течение достаточно короткого периода времени, но «сеанс» генерации отчета поддерживается с помощью идентификатора токена. Когда отчет будет завершен на сервере, вы, вероятно, захотите сохранить его в кеше где-то до тех пор, пока он не будет запрошен, и через некоторое время истечет срок его действия, если браузер был закрыт.

О, и приятный побочный эффект, о котором я раньше не упоминал - пользователь видит, что веб-приложение все еще живо, и у него все еще есть сетевое подключение к нему. Оставление курсора на пару минут может расстраивать:)

0 голосов
/ 16 апреля 2010

Вы пытались использовать сервер с поддержкой COMET? Вы можете поддерживать длительный запрос, используя различные методы, такие как COMET или даже длительный опрос. Или простой AJAX живой пинг на сервер должен сделать свое дело. Перезагрузите страницу, используя Ajax, когда вы знаете, что отчет был создан.

...