Nano Hash - криптовалюты, майнинг, программирование

Что такое переходы состояний Netty Channel?

Каналы Netty имеют несколько состояний, но я не могу найти документацию о фактических переходах между состояниями. Самая близкая к любой документации по этому вопросу, которую я смог найти для системы Netty 3.2.x, - это здесь.

Мне удалось найти возможные состояния, в которых может находиться канал здесь.

Однако нет ничего, что бы описывало нормальные переходы, которые канал может совершать из одного состояния в другое. Похоже, что не все каналы совершают все возможные переходы состояний.


Ответы:


1

Различные каналы 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
  • хороший обзор, спасибо, он основан на некоторых статьях о tcp или просто на чтении источников netty? 28.06.2013
  • и вопрос: если мне нужно подсчитать количество активных соединений, которые клиент делает с удаленным узлом, будет ли достаточно увеличить channelConnected и уменьшить channelDisconnected? Будет ли счетчик точен в случае keep-alive подключений и других особенностей? Спасибо! 28.06.2013
  • Я читал источник для деталей. Решил, что я спасу кого-то еще от беспокойства, если у них возникнут похожие вопросы. Счетчик активных соединений WRT, действительно достаточно увеличить ваш счетчик в channelConnected и уменьшить его в channelDisconnected. HTTP keep-alive и аналогичные конструкции протокола на TCP не влияют на Netty, кроме как косвенно, поскольку приложение контролирует соединения сокетов. 22.10.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..