остановка / отмена отключенных потоков запросов GET как можно скорее - PullRequest
2 голосов
/ 17 марта 2012

Я использую Jetty, версия 7.0.1, если это имеет значение.

Иногда у меня есть довольно длительные задачи на сервере, которые я хотел бы отменить / остановить, если клиент отключается (в случае GETзапросы, а не, например, загрузка файлов POST).Кажется, что это не так, и что задачи продолжают выполняться до завершения.

Возможно, я могу использовать слушатель ServletRequestListener.requestDestoryed для получения уведомлений о таких задачах, но каков рекомендуемый подход для остановки потока запроса?А как насчет освобождения ресурсов, таких как соединения с базой данных, файловые дескрипторы или выполнение задач (служба executor)?

Каков рекомендуемый подход для остановки таких задач как можно скорее?

1 Ответ

0 голосов
/ 17 марта 2012

сначала я бы порекомендовал обновить до последней версии Jetty, мы исправили тонну с 7.0 серии

во-вторых, вам лучше всего решить эту проблему, спроектировав либо Jetty-продолжения, чтобы получить поддержку асинхронного сервлета со спецификацией сервлета 2.5 (который является Jetty7), либо обновить сервлет 3.0 (Jetty 8) и не полагаться на методы get сервлет API, чтобы заблокировать ожидание ответа на отправку. Вместо этого обработайте запрос, а затем создайте поток или используйте будущее исполнителя для обработки действий, а затем перезвоните на запрос, когда у вас появится полезная нагрузка или сообщение об успешном завершении. Причина в том, что, блокируя API-интерфейс сервлета в процессе запроса, вы потребляете ресурсы и потоки из пула потоков сервлета ... вы сможете значительно увеличить масштаб, используя продолжения или асинхронные сервлеты 3.0 ...

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

По крайней мере:)

...