Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Netty: отслеживание разрыва связи 
:(
    Опции темы
Perl_sapiens
Дата 16.9.2012, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Доброго времени суток, уважаемые программисты.
Стал знакомится с отличным сетевым framework'ом Netty и начал с разбора примеров, которые прилагаются к документации. И всё вроде как понятно и просто, если бы не одна проблемка.

Запустив пример HTTP (File Server) и для эксперемента вырезав из него код, отвечающий за "кэширование" запрашиваемых файлов (NotModified), я зажал в браузере F5. В консоль стали вылетать ошибки такого содержания:
Код

java.io.IOException: Удаленный хост принудительно разорвал существующее подключение
    at sun.nio.ch.SocketDispatcher.read0(Native Method)
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
    ... и еще 9 строк
java.nio.channels.ClosedChannelException
    at org.jboss.netty.handler.stream.ChunkedWriteHandler.discard(ChunkedWriteHandler.java:169)
    at org.jboss.netty.handler.stream.ChunkedWriteHandler.flush(ChunkedWriteHandler.java:289)
    ... и еще 17 строк
java.io.IOException: Программа на вашем хост-компьютере разорвала установленное подключение
    at sun.nio.ch.SocketDispatcher.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
    ... и еще 34 строки
java.nio.channels.ClosedChannelException
    at org.jboss.netty.handler.stream.ChunkedWriteHandler.discard(ChunkedWriteHandler.java:169)
    at org.jboss.netty.handler.stream.ChunkedWriteHandler.flush(ChunkedWriteHandler.java:289)
    ... и еще 21 строка


Через дебаггер отметил, что ошибки эти вылезают сразу после попытки записать что-то в канал (ch.write(response);), но при этом все состояния канала (connected, open, bound, readable, writable) находятся в положительном состоянии (true).

Как отследить момент, когда соединение было разорвано, что бы зря не пытаться записать что-то в закрытый канал?
PM MAIL   Вверх
COVD
Дата 16.9.2012, 14:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



Цитата

ошибки эти вылезают сразу после попытки записать 

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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.