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

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

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

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

  1. Клиент выполняет запрос от потока, и сервер отправляет документ в ответе, который может занять несколько минут. До тех пор клиент показывает, "Ожидайте" сообщение, счетчик прогресса, и т.д. (Это, кажется, просто реализовать.)
  2. Клиент отправляет команду "Start conversion". Сервер возвращает некоторый идентификатор задания, который клиент может использовать для частого опроса относительно обновления статуса или заключительного документа. (Это, кажется, удобно для пользователя, потому что я могу отобразить прогресс, но также и требую, чтобы сервер был с сохранением информации.)
  3. Клиент отправляет команду "Start conversion". Сервер так или иначе уведомляет клиент, когда он сделан. (Здесь я даже не знаю, как сделать это),

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

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

11
задан Daniel Rikowski 2 August 2010 в 07:17
поделиться

2 ответа

Поскольку это почти все делается на стороне сервера, клиент мало что может сделать, кроме как как-то опрашивать сервер на предмет обновления статуса.

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

Я бы просто выбрал #2.

5
ответ дан 3 December 2019 в 11:20
поделиться

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

1
ответ дан 3 December 2019 в 11:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: