Отмена запроса при потере связи с клиентом - PullRequest
0 голосов
/ 30 декабря 2011

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

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

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

  • кэширование может сделать почти каждую страницу быстрой
  • токен может помочь избежать отправки чего-либо дважды

но есть некоторые запросы, которые могут занять некоторое время. Давайте возьмем картографический сервис в качестве примера. Расчет маршрута займет некоторое время. Одним из решений, позволяющих избежать повторной отправки запроса, мог бы быть флаг «calcInProgress» вместе с сообщением пользователю. Но тогда все еще возможно создать много сеансов и, следовательно, множество запросов для атаки DOS ...

Мне по-прежнему любопытно: нет ли способа настроить сервер на отмену запроса? Я имел обыкновение разрабатывать в системе, где сервер вел себя таким образом, и это было здорово: -)

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

Согласно вашему комментарию, вы пытаетесь избежать перезагрузки и нескольких кликов.Надлежащая техника должна использовать поддержку Grails для обработки нескольких представлений формы:

http://grails.org/doc/2.0.x/guide/theWebLayer.html#formtokens

1 голос
/ 30 декабря 2011

Вероятно, нет такого пути.И я уверен, что Grails (и ваш веб-контейнер) предназначены для

  1. принятия входящего запроса
  2. обработки его на стороне сервера
  3. отправки ответа

если что-то случится во время фазы 2, я узнаю об этом только на этапе отправки ответа.На самом деле вы можете отправлять данные в HttpSerlvetRespone самостоятельно, обрабатывать IOException и т. Д., Но я думаю, что это будет слишком низкоуровневый способ.И это не поможет вам отменить операции с БД, пока вы готовите данные для отправки.

Кстати, обычно используется веб-интерфейс, такой как nginx, который принимает входящий запрос и обрабатывает все это.проблемы с отмененными запросами, медленные запросы (я полагаю, это настоящая проблема?) и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...