Есть ли способ узнать, прерван ли HttpServletRequest?Обнаружение прерванных запросов в HttpServlet
Я пишу мгновенное приложение для браузера (какой-то чат): клиенты запрашивают новые события в цикле, используя AJAX-HTTP-запросы. Сервер (Tomcat) обрабатывает запросы в HttpServlet. Если для этого клиента нет новых событий, сервер задерживает ответ до тех пор, пока не поступит новое событие или не произойдет тайм-аут (30 секунд).
Теперь я хочу идентифицировать клиентов, которые больше не являются опросами. Поэтому я запускаю пин-таймер в конце запроса, который останавливается при поступлении нового запроса. Если клиент закрывает окно браузера, TCP-соединение закрывается и HTTP-запрос прерывается.
Задача: Клиент не сталкивается с таймаутом kick-timeout, потому что Servlet все еще обрабатывает запрос события - спящий и ожидающий события или таймаута.
Было бы здорово, если бы я мог как-то прослушать события прерывания связи, а затем уведомить запрос ожидания, чтобы остановить его. Но я не мог найти ничего подобного в HttpServletRequest или HttpServletResponse ...
Какой API/фрейм вы используете для обработки асинхронных запросов и/или нажатия HTTP? Ваш вопрос звучит/читается очень странно, потому что обычный API Servlet обычно работает, поэтому я догадался, что для этого вы используете некоторые API/фреймворки (например, Comet, Atmosphere, Servlet 3.0 async и т. Д.), , Это либо это, либо вы делаете все совершенно неправильно. – BalusC 2010-12-06 23:24:20
Я не использую рамки. Это так просто, как это: ::::::: UpdateServlet doGet-метод (1) получает updateClient от сеанса (2) получает список от updateClient (3) Печать закодированные событий. ::::::: UpdateClient GetEvents-метод (1) ожидает, если события не ждут (2) возвращает события ::::::: UpdateClient addEvent-метод (1) добавляет событие к списку (2) уведомляет ожидающие потоки Запросы обрабатываются одновременно в разных потоках. –
Escudo
2010-12-06 23:45:51