Подтвердить что ты не робот

Как обрабатывать длительные операции веб-сервиса?

Мне нужно создать приложение Java EE, которое конвертирует большие документы в разные форматы. Каждое преобразование занимает от 10 секунд до 2 минут. Запросы SOAP будут сделаны из клиентского приложения, которое я также должен создать.

Какой лучший способ справиться с этими длинными запросами? Очевидно, что процесс занимает много времени, чтобы работать без обратной связи с пользователем.

Я могу думать о следующих способах предоставления какой-либо обратной связи, но я не уверен, нет ли лучшего способа, возможно, что-то стандартизованного.

  • Клиент выполняет запрос из потока, и сервер отправляет документ в ответ, что может занять несколько минут. До тех пор клиент показывает сообщение "Подождите", прокрутите счетчик и т.д. (Это кажется простым в реализации.)
  • Клиент отправляет команду "Начать преобразование". Сервер возвращает какой-то идентификатор задания, который клиент может использовать для частого опроса для обновления статуса или окончательного документа. (Это кажется удобным для пользователя, потому что я могу показать прогресс, но также требует, чтобы сервер был работоспособным.)
  • Клиент отправляет команду "Начать преобразование". Сервер как-то уведомляет клиента о его завершении. (Здесь я даже не знаю, как это сделать)

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

Спасибо за ваши ответы.

4b9b3361

Ответ 1

Так как это почти все сделано на стороне сервера, клиент не так много делает, кроме как опросить сервер как-то для обновлений статуса.

# 1 в порядке, но пользователи очень нетерпеливы. "Несколько минут" слишком длинное для большинства людей. Вам понадобится HTTP Streaming для реализации # 3, но я думаю, что это перебор.

Я бы просто пошел с № 2.

Ответ 2

Для 3 сервер должен вернуть уникальный идентификатор клиенту и использовать этот идентификатор, который клиент должен запросить у сервера результат позже.