2015-10-12 1 views
1

Сценарий:Обнаруживать браузер закрыт в середине цикла ответа на запрос HTTP

  1. веб-приложения подключения к Java Servlet. (Использование встроенного причала)
  2. Высокий запрос на задержку, пример создания отчета (занимает секунды)
  3. Пользователь может закрыть браузер между циклом ответа HTTP-запроса.

Проблема:

Как обнаружить браузер Зазор между запросами и ответами циклом, на стороне сервера?

Хотя проблема может быть решена с помощью другого запроса от пользовательского интерфейса, мне было интересно, можем ли мы получить информацию из самого протокола связи? Поскольку HTTP использует протокол TCP/IP в качестве базового протокола, мы не можем обнаружить это как соединение, закрытое со стороны инициатора соединения.

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

пошел Также через эти StackOverflow вопросы

  1. Java Servlet : How to detect browser closing?
  2. How to detect browser close at server side in asp.net?

Любые идеи?

ответ

3

Вы получите исключение, если попытаетесь записать в выходной поток/запись сервлета.

+0

Благодарим за отзыв. В основном вы указываете на метод out.checkError(). Я искал механизм, основанный на событии, который я могу обнаружить ** между ** и, возможно, прекратить обработку. – arunvg

+0

Я не думаю, что такое событие существует, но вы можете запустить свое собственное событие путем прослушивания 'window.close()' в клиенте (javascript) и отпустить второй запрос ajax. Например: '$ (window) .close (new function() {...})' –

+0

В этой ситуации сервер не может инициировать событие. только попытка использовать соединение приведет к тому, что событие будет замечено. это может быть чтение из входного потока запроса или запись в выходной поток ответа. –

Смежные вопросы