Обнаружение отключения клиента в Tomcat [дубликат]

Как насчет:

>>> string_1 = "(555).555-5555"
>>> string_2 = "(555) 555 - 5555 ext. 5555"
>>> any(c.isalpha() for c in string_1)
False
>>> any(c.isalpha() for c in string_2)
True
9
задан skaffman 28 January 2012 в 16:21
поделиться

3 ответа

Есть ли способ обнаружить это без записи каких-либо данных?

Нет, потому что в TCP / IP нет способа обнаружить это без записи каких-либо данных.

Не беспокойтесь об этом. Просто выполните действия запроса и напишите ответ. Если клиент исчез, это вызовет IOException: сброс соединения, который будет выброшен в контейнер сервлетов. Ничего вам не нужно делать.

8
ответ дан user207421 28 August 2018 в 12:21
поделиться

Вы пытались сбросить буфер ответа: response.flushBuffer (); Кажется, что вы выбрали исключение IOException, когда клиент отключился.

2
ответ дан Alex 28 August 2018 в 12:21
поделиться

Мне нужно на самом деле обнаружить, когда клиент отключается, потому что у меня есть некоторая очистка, которую я должен выполнить в этой точке (ресурсы для выпуска и т. д.).

Для блока finally. Он будет выполнен независимо от результата. Например,

OutputStream output = null;
try {
    output = response.getOutputStream();
    // ...
    output.flush();
    // ...
} finally {
    // Do your cleanup here.
}

Если у меня есть доступ к HttpServletRequest, будет пытаться прочитать из этого запроса исключение IOException, если клиент отключится?

Зависит от того, как вы читаете, и сколько тела запроса уже находится в памяти сервера. В случае обычных запросов, закодированных в форме, всякий раз, когда вы вызываете getParameter() заранее, он обычно будет полностью разбираться и храниться в памяти сервера. Вызов getInputStream() не будет полезен вообще. Лучше сделайте это вместо ответа.

5
ответ дан BalusC 28 August 2018 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: