Struts2 + jQuery - Отправка регулярных обновлений клиенту

StackOverflow https://stackoverflow.com/questions/1416892

Вопрос

Я реализую функциональность в своем веб-приложении таким образом, что клиент может сгенерировать отчет, введя некоторые данные и нажав на кнопку отправить.

Проблема в том, что генерация отчета занимает много времени, и отчет может не сгенерироваться, если пользователь ввел неверные данные.

Задача создания полного отчета имеет много подзадач, и я хочу, чтобы, когда клиент нажимает кнопку отправки, чуть ниже этой страницы я хотел показать статус / ход выполнения задач создания отчета, разделенных на различные подзадачи, такие как

- Validating input data ------ Done
- Fetching the data     ------ In Progress
 and so on,

Как я могу добиться этого, используя Struts2, jQuery на веб-уровне?

Любая помощь будет высоко оценена.

Спасибо

Это было полезно?

Решение

У нас была похожая проблема.Транзакция обычно занимает 20 секунд, иногда более минуты.Мы думали, что найдутся более простые решения, но в итоге мы пришли к схеме, подобной этой,

  1. Когда получен длительный запрос, создается сеанс и создается новый поток для обработки запроса.
  2. Страница немедленно возвращается с текстом, отображающим "Сбор данных ...".Страница содержит таймер, который обновляется каждую секунду.URL-адрес перезагрузки содержит идентификатор сеанса (мы не используем HttpSession) в параметре запроса.
  3. Когда обработчик действия видит запрос с идентификатором сеанса, он знает, что сеанс запущен, проверьте, обновляется ли переменная состояния рабочим потоком.Если это не сделано, страница обновляется с новым статусом "Получение данных из базы данных DB1 ...".Когда это делается при перезагрузке, появляется мерцание.Если вам не все равно, вы можете использовать AJAX для обновления статуса.
  4. Когда рабочий поток завершен и страница готова к доставке, вызов просто возвращает результат.

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

Другие советы

Взгляните на перехватчик Struts2 ExecuteAndWait. http://struts.apache.org/2.x/docs/execute-and-wait-interceptor.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top