Различные каналы Netty действительно имеют разные переходы состояний.
В целом возможные переходы состояний для каналов сервера на основе TCP:
OPEN -> ( BOUND -> UNBOUND )* -> CLOSE
Если вы используете подкласс SimpleChannelHandler в своем конвейере, эквивалентными методами для обработки восходящих событий при возникновении одного из этих изменений состояния являются:
channelOpen
channelBound
channelUnbound
channelClose
Каналы сервера никогда не переходят в состояние ПОДКЛЮЧЕНО.
Каналы сервера редко возвращаются в состояние BOUND после перехода в состояние UNBOUND, однако это зависит от приложения, поэтому YMMV.
Обратите внимание, что серверные каналы могут запускать события при открытии или закрытии дочернего канала. Эти события могут происходить только после того, как канал сервера находится в состоянии BOUND. Когда эти события отправляются вверх по течению от имени канала сервера, вызываются следующие методы вашего подкласса SimpleChannelHandler:
childChannelOpen
childChannelClosed
Возможные переходы состояний для дочерних и клиентских каналов на основе TCP:
OPEN -> ( BOUND -> ( CONNECTED -> DISCONNECTED )* -> UNBOUND )* -> CLOSE
Похоже, что сначала переход в состояние CONNECTED не принудительно применяется в коде канала; однако это состояние неизменно запускается первым как для дочерних, так и для клиентских каналов в рамках Netty, прежде чем канал будет переведен в состояние CONNECTED.
Если вы используете SimpleChannelHandler или его подкласс в своем конвейере, эквивалентными методами являются:
channelOpen
channelBound
channelConnected
channelDisconnected
channelUnbound
channelClose
Канал на основе TCP должен находиться в состоянии CONNECTED, прежде чем что-либо можно будет прочитать или записать в канал. Это включает в себя серверные каналы, которые никогда не могут быть прочитаны или записаны, что не является большим сюрпризом, поскольку серверные каналы неизменно используются только для управления операцией подключения от имени сервера.
Сокеты дейтаграмм работают иначе, чем сокеты на основе TCP, поскольку их можно использовать для чтения и записи данных без фактического подключения (хотя подключение сокета дейтаграммы может быть быстрее, поскольку вы избегаете проверок безопасности). Сокеты дейтаграмм можно эффективно использовать с использованием обоих описанных выше переходов состояний для дочерних и серверных каналов TCP.
13.11.2012
channelConnected
и уменьшитьchannelDisconnected
? Будет ли счетчик точен в случаеkeep-alive
подключений и других особенностей? Спасибо! 28.06.2013channelConnected
и уменьшить его вchannelDisconnected
. HTTP keep-alive и аналогичные конструкции протокола на TCP не влияют на Netty, кроме как косвенно, поскольку приложение контролирует соединения сокетов. 22.10.2013