1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ibyte-icloud-tcp-gateway

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 13:48 e232250

TCP Gateway

Введение

Дизайн архитектуры технологии IoT-устройства для сетевого шлюза (управление сеансами, управление сердцебиением, восходящая и нисходящая передача данных).

Описание

NioEventLoop — это реактор потока Netty. Его роль:

  1. Boss Group: в качестве сервера Acceptor поток используется для принятия клиентских подключений и пересылки их потокам WorkerGroup.
  2. Worker Group: как поток ввода-вывода, он отвечает за ввод-вывод чтения и записи, чтение сообщений из SocketChannel или запись сообщений в SocketChannel.
  3. Task Queue / Delay Task Queue: как поток задач по расписанию, выполняет задачи по расписанию, такие как проверка состояния канала и отправка сообщений о сердцебиении.
Краткое описание
  • TcpServer: предоставляет услуги подключения TCP.
  • TcpSessionManager: вы можете добавить прослушиватель событий для прослушивания создания сеанса TCP, уничтожения и т. д.
  • LogSessionListener: прослушиватель журнала, связанный с tcpSessionManager, прослушиватель должен быть предварительно зарегистрирован в SessionListener.
  • TcpSender: отправитель TCP, пользователь отправляет сообщение клиенту, реализует логику нисходящей передачи.
  • ServerConfig: класс управления конфигурацией TCP.
  • TcpConnector: контейнер TCP, используемый для управления соединениями между службами и клиентами.
  • NotifyProxy: отправляет уведомление прокси-классу.

Это все настройки по умолчанию, вы можете не изменять их, но вам может потребоваться изменить порт TCP.

Структура сети TCP-шлюза

На основе Netty построен контейнер с длительным подключением TCP-шлюза, который предоставляет API-сервисы запросов на уровне шлюза.

Клиент обращается к TCP-шлюзу через доменное имя + порт, разные операторы связи соответствуют разным VIP, VIP публикуется на LVS, LVS перенаправляет запрос на HAProxy на бэкэнде, а затем HAProxy перенаправляет его на IP + порт Netty.

LVS пересылает запрос на HAProxy, запрос проходит через LVS, но ответ напрямую возвращается клиенту через HAProxy, это также режим DR LVS.

c5da1236f6d6c151081a215ab3a3170c

Диаграмма последовательности выполнения TCP-шлюза

Шаги с первого по девятый — это последовательность создания серверной части Netty, шаги с десятого по тринадцатый — последовательность создания контейнера TCP-шлюза.

Шаг 1: создать экземпляр ServerBootstrap, ServerBootstrap — это вспомогательный класс для запуска серверной части Netty. — Шаг 2: настроить и привязать пул потоков Reactor, EventLoopGroup — это пул реакторов Netty, EventLoop отвечает за все каналы, зарегистрированные в этом потоке. — Шаг 3: настройка и привязка канала сервера, Netty Server необходимо создать объект NioServerSocketChannel. — Шаг 4: создание ChannelPipeline при установлении соединения TCP, ChannelPipeline по сути является цепочкой обязанностей и выполнения ChannelHandler. — Шаг 5: добавление и настройка ChannelHandler, ChannelHandler последовательно присоединяется к ChannelPipeline. — Шаг 6: привязка порта прослушивания и запуск службы, регистрация NioServerSocketChannel в Selector. — Шаг 7: опрос селектора, EventLoop отвечает за планирование и выполнение операций опроса селектора. — Шаг 8: выполнение уведомления о событии сетевого запроса, опрос готового канала, выполнение ChannelPipeline EventLoop. — Шаг 9: выполнение Netty System и бизнес-ChannelHandler, планирование и последовательное выполнение ChannelHandler в ChannelPipeline. — Шаг 10: вызов бэкэнд-сервиса через прокси, после события ChannelRead отправьте расписание бэкэнд-службы. — Шаг 11: создание сеанса, сеанс и соединение взаимозависимы. — Шаг 12: создание соединения, сохранение контекста ChannelHandlerContext в соединении. — Шаг 13: добавить SessionListener, SessionListener отслеживает события SessionCreate и SessionDestory.

Пример программы

1. Настройка локального хоста

Windows: C:\Windows\System32\drivers\etc\hosts

Добавить: 127.0.0.1 iot-open.icloud.com

2. Запуск сервера

Расположение: com.ibyte.iot.test.server.TestTcpServer

3. Запуск клиента

Местоположение: com.ibyte.iot.test.client.TcpClient

Группа обмена

 
Группа обмена WeChat: WeChat WeChat Public Account: Code Farmer Architecture

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/ibyte-icloud-tcp-gateway.git
git@api.gitlife.ru:oschina-mirror/ibyte-icloud-tcp-gateway.git
oschina-mirror
ibyte-icloud-tcp-gateway
ibyte-icloud-tcp-gateway
master