Сервлет, долго обрабатывающий отмену, когда браузер закрывается

Вы можете использовать это так:

find . -name 'config.xml' -exec bash -c \
'd="$HOME/data/${1%/*}/"; mkdir -p "$d"; command cp -p "$1" "$d"' - {} \;
8
задан Ma99uS 6 February 2009 в 13:51
поделиться

4 ответа

Единственный реальный способ иметь дело с этим состоит в том, чтобы иметь браузер, постоянно говорят Вам, что это все еще там, говорите каждые 5-10 секунд. Если Вы идете в течение минуты, ничего не слыша, Вы предполагаете, что клиент ушел, и забудьте то, что Вы делаете.

Существует несколько способов реализовать это:

  • Обновление Meta: Мне не нравится это, потому что это является дезориентирующим и очевидным для пользователя;
  • iframe, который делает это (менее очевидное); или
  • Некоторый метод Ajax, который является, вероятно, наилучшим вариантом.

Нет никакого реального способа, которым можно обнаружить, если клиент все еще читает то, что Вы отправляете. Это занимает время, чтобы соединения TCP умерли, и путь к клиенту является часто непрямым так или иначе (через прокси и т.д), так забудьте об обнаружении этого.

4
ответ дан 5 December 2019 в 22:20
поделиться

Сервлет имеет буфер вывода, который должен заполниться, прежде чем данные на самом деле отправляются в браузер. Если этот буфер не был заполнен, никакие данные на самом деле не отправляются в сети. Пока Вы не отправляете данные по сети, Вы, привычка знает, что соединение закрывается.

Можно установить размер буфера путем вызова метода на объекте ответа прежде, чем получить поток вывода или устройство записи.

1
ответ дан 5 December 2019 в 22:20
поделиться

Вы пытаетесь сделать что-то, что не поддерживается протоколом HTTP. Целая природа сети основана на запросе/ответе.

Один способ моделировать, в чем Вы нуждаетесь, состоит в том, чтобы использовать Ajax. Поток был бы чем-то вроде этого:

  1. Браузер отправляет, с помощью Ajax, запроса на объекты 1 - 10
  2. Запрос серверного процесса, сборка и отправляют ответ с объектами от 1 до 10.
  3. Браузер получает ответ, результат синтаксического анализа, экспонаты от 1 до 10 и повторный шаг 1, запрашивая объекты 11 - 20.

Эта архитектура избавит от необходимости проверять на "доступность" клиента и также улучшит масштабируемость Ваших серверных компонентов.

Я надеюсь, что это помогает.

1
ответ дан 5 December 2019 в 22:20
поделиться

java.io.PrintWriter javadoc sez: Методы этого класса никогда не генерируют исключения ввода-вывода - поэтому используйте вместо него javax.servlet.SocketOutputStream (response.getOutputStream ()), и вы получите некоторое исключение IOException со временем.

0
ответ дан 5 December 2019 в 22:20
поделиться
Другие вопросы по тегам:

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