Обнаружение клиентских отключений в веб-сервисах - PullRequest
6 голосов
/ 08 сентября 2008

Я использую стек веб-служб Apache CXF . Когда клиент отключается или отключается от сервера до завершения операции, сервер продолжает выполнение операции до ее завершения. Я хотел бы, чтобы сервер обнаружил, когда клиент отключился, и обработал это соответствующим образом.

Есть ли способ определить, когда клиент отключается с помощью Apache CXF? Как насчет использования других стеков веб-сервисов Java?

1 Ответ

2 голосов
/ 08 сентября 2008

Я не знаком с Apache CXF , но следующее должно быть применимо к любой среде на основе сервлетов Java.

Чтобы определить, отключился ли пользователь (кнопка остановки, закрытый браузер и т. Д.), Сервер должен попытаться отправить пакет. Если соединение TCP / IP было закрыто, будет выброшено IOException.

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

Однако при использовании этого метода могут возникнуть некоторые проблемы:

  1. Отправка символов во время обработки приведет к тому, что ответ будет «зафиксирован», поэтому может быть невозможно установить заголовки HTTP, файлы cookie и т. Д. На основе результата длительной обработки на стороне сервера.

  2. Если выходной поток буферизован, пробелы не будут отправлены немедленно, что не позволит выполнить адекватный тест. В качестве обходного пути можно использовать flush().

  3. Может быть трудно реализовать эту технику для данной структуры или технологии представления (JSP и т. Д.). Например, код рендеринга страницы не сможет отправить тип контента после того, как ответ был зафиксирован.

...