0

В моем приложении запросы HTTP-браузера помещены в очередь.Может ли контроллер grails дважды отображать значения текста клиенту

При запросе HTTP на сервер клиент должен быть уведомлен сервером о том, что запрос принят (скажем, с http-статусом 202 или просто сообщение «Выполняется»), так что очередь на стороне клиента может отправить второй запрос к серверу.

Как только первый запрос выполняется полностью, клиент должен быть снова уведомлен сервером о том, что запрос имеет успех (например, статус http равен 200).

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

Хотя я знаю, что один запрос и множественный ответ невозможны. Но есть ли способ сделать текст по крайней мере дважды для запроса?

+0

Стандартный контроллер Grails может выдавать только один ответ. Если вам нужно что-то, у кого есть возможность выдавать несколько ответов, вам нужно будет что-то посмотреть по линии Атмосферы. –

+0

благодарит за это. – shishank

ответ

0

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

Итак, предположим, что мы используем Rabbit MQ в качестве нашей очереди сообщений. Давайте сделаем следующее:

  1. Очередь отправила запрос серверу, обрабатывающему некоторый ресурс.
  2. Сервер принял запрос и начал обрабатывать его и отправил сообщение с кодом 202/в процессе. Кроме того, он отправил сообщение в кролик mq для обработки запроса, тем временем отправляя код сообщения клиенту.

  3. Другое сообщение было обработано и завершено, и сообщение 200 передало сообщение об успешной очереди с некоторым идентификационным номером, чтобы идентифицировать запрос от клиента, например. идентификатор клиента, urn no. и т. д. Или вместо того, чтобы просто нажать статус сообщения в базе данных и использовать другой вызов от клиента, чтобы проверить, обновлен ли статус сообщения до ожидаемого.

  4. Теперь клиент может легко проверить статус своего запроса, проверив очередь или базу данных.

Вы можете использовать запросы ajax, а также отслеживать, завершен ли какой-либо процесс или нет на стороне сервера.

Надеюсь, это поможет.

+0

спасибо за предложение. Кажется, Джошуа ответил на мой вопрос. – shishank