Мониторинг и обработка событий Netty (включено) [с преимуществами]

Java задняя часть WeChat Netty

Отпуск по уходу за ребенком закончился, и сегодня я снова начал работать в обычном режиме, как раз к мероприятию Mi Noodle Festival, и я буду занят некоторое время. Время проведения Mi Noodle Festival с 4.03 до 4.10. Есть много скидок. Если вам интересно, вы можете обратить внимание на приложение mi.com или Xiaomi Store.

Сегодня я дал вам преимущество: динамик Xiaoai размера F, говорят, что он хорошо продается, и его нелегко захватить Воспользуйтесь преимуществом этой компании, я поделюсь им с вами, чтобы показать вашу поддержку и поддержку.

Работа Nuggets действительно заботливая.Он взял на себя инициативу найти меня и сказал: Моя статья о благосостоянии не является технической статьей и не может быть помещена в информационный поток.Ее можно увидеть только на личной домашней странице.Техническая статья, с содержанием отправки льгот в конце. Еще раз спасибо за заботу и советы брата по операции Наггетс "Убийца".

У меня не было времени читать последующие главы реального боя RabbitMQ.Эта статья суммирует технические моменты, которыми ранее делилась команда проекта: Мониторинг и обработка событий Netty.

Через введение вы узнаете:

  • Мониторинг событий, NIO, модель потоков и другие связанные концепции;
  • Общая структура Netty;
  • Мониторинг и обработка событий;
  • Резюме проектной практики;

В этой статье сначала будут представлены первые два раздела, а в следующей — последние два раздела.

В конце этой статьи мы объясним правила извлечения выгоды, и все будут активно участвовать >_

Связанные концепции

Netty — это инфраструктура NIO, которая абстрагирует изменения статуса установления канала ввода-вывода, возможности чтения и записи в события и передает их в цепочке ответственности.Вы можете вставлять пользовательские обработчики в цепочку обработки, чтобы реагировать на интересные события.Мониторинг и обработка .

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

прослушиватель событий

Шаблон прослушивателя JDK в основном включает следующие элементы:

  • Объект события EventObject
  • Интерфейс прослушивателя событий EventListener
  • пользовательский источник событий
  • триггер события

Шаблон очень прост, пользователь может настроить источник события, сохранить соответствующие данные инициирующего объекта, и после запуска события они передаются обработчику, который зарегистрировал событие. Интерфейс прослушивателя событий предназначен для унификации методов обработчика.

Возьмем понятное событие нажатия кнопки, где ActionListener — прослушиватель событий, а ActionEvent — объект события, содержащий источник события:

Конкретный процесс реализации комплекса мониторинга событий:

  • определить источник события;
  • Уточните возможные события и определите их как различные объекты событий или методы событий;
  • Обеспечьте структуру хранения для сохранения объекта, прослушивающего событие, и когда событие произойдет, прослушиватель будет уведомлен;
  • Выполнить метод обратного вызова для бизнес-обработки;

事件监听

Модель цепочки ответственности

В основном это относится к организации обработчиков событий.Через модель цепочки ответственности очень удобно добавлять собственные обработчики на любом узле обработки.

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

责任链模式

socket

Вообще говоря, NIO в основном предназначен для сетевого ввода-вывода, чтения данных с сетевой карты и записи данных на сетевую карту.Это источник данных режима прослушивателя.

Сетевое программирование в основном осуществляется через интерфейс сокетов, предоставляемый операционной системой.Понимание интерфейса сокетов позволяет суммировать события.

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

sokcet接口

Модель NIO и IO

NIO относится к неблокирующему вводу-выводу. Обычно мы называем ввод-вывод блокирующим вводом-выводом. Если вы хотите полностью понять эти концепции, вам придется много говорить. Вот краткое изложение.

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

同步阻塞

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

В ответ на эту ситуацию появилась концепция модели IO несколькими способами:

  • Синхронный неблокирующий ввод-вывод;
  • Мультиплексирование IO;
  • Асинхронный ввод-вывод;

Для конкретного ознакомления, в Интернете много информации, поэтому я не буду вдаваться в подробности. Здесь я упомяну только мультиплексирование ввода-вывода. Позвольте мне рассказать о моем понимании. Этот метод используется в нашем проекте.

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

Друзья, которые раньше занимались разработкой NIO, вы можете посмотреть на следующий пример, чтобы просмотреть весь процесс:

java NIO示例

резьбовая модель

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

Это приводит к концепции многопоточных моделей, таких как модели Reactor и Proactor. Конкретные детали не будут представлены. В Интернете есть много материалов, и конечной целью является повышение производительности обработки событий ввода-вывода.

Общая структура Netty

Эта часть в основном предназначена для понимания Netty и не вникает сначала в принцип ее реализации.

Обзор

Netty — это асинхронная среда сетевых приложений, управляемая событиями, которая поддерживает быструю разработку поддерживаемых высокопроизводительных серверов и клиентов, ориентированных на протокол; Он использует мощь высокоуровневого API Java и скрывает его за простым в использовании API;

Netty总体结构

  • Ядро (основная часть) представляет собой некую общую абстракцию базовой сетевой связи, эта часть является ключевой.
  • Транспортные услуги (услуги передачи), определение конкретных транспортных возможностей сети и некоторые реализации.
  • Поддержка протокола (поддержка протокола), netty обеспечивает кодирование и декодирование для некоторого общего соглашения.

нулевая копия

В широком смысле нулевое копирование означает, что центральному процессору не нужно потреблять ресурсы для копирования данных между памятью во время работы компьютера. Метод sendfile() в Linux и метод FileChannel.transferTo() в Java NIO реализуют функцию нулевого копирования, и Netty также реализует нулевое копирование, заключая метод FileChannel.transferTo() NIO в FileRegion.

Нулевая копия, о которой говорится в Netty, полностью находится в пользовательском режиме и больше склонна к оптимизации операций с данными. Netty позволяет нам объединять несколько фрагментов данных в целый фрагмент виртуальных данных, которые пользователи могут использовать без копирования данных.

Netty零拷贝

Унифицированная коммуникационная модель

Традиционный API ввода-вывода JAVA должен использовать разные типы и методы при работе с различными транспортными протоколами, такими как: java.net.Socket и java.net.DatagramSocket, они не имеют одного и того же супертипа; новый API ввода-вывода Java и исходная блокировка IO API также несовместим;

Netty предоставляет унифицированный программный интерфейс API, который абстрагирует все операции связи «точка-точка» и может переключаться между различными реализациями передачи, настраивая всего несколько строк кода:

  • Передача TCP/IP на основе NIO
  • Передача TCP/IP на основе OIO
  • Передача UDP/IP на основе OIO
  • местная передача

модель события

Другими словами, мониторинг и обработка событий обеспечивают хороший способ обработки различных событий.

Netty事件模型

Общий процесс обработки показан на рисунке выше, а подробности будут представлены в следующей статье.


Преимущество Описание

Наконец, давайте поговорим о преимуществах: динамик Xiaoai F-код.

Были подготовлены две копии, в основном для благодарности друзьям «Официального аккаунта WeChat» и «Сообщества Nuggets».Каждая копия включает в себя 1 динамик xiaoai размера F и 1 динамик xiaoai mini размера F, в которых можно участвовать одновременно.

Код F для мобильного телефона Xiaomi происходит от английского слова «Друг». Это право преимущественной покупки, предоставляемое Xiaomi основным пользователям Xiaomi и пользователям сети, которые внесли свой вклад в Xiaomi. Если у вас есть код Xiaomi F, вы можете использовать Xiaomi F Код напрямую без ожидания Покупайте сопутствующие товары!

Проще говоря, F-код означает, что вам не нужно его брать, вы можете купить его напрямую~

Крайний срок розыгрыша

9 апреля в 12.00

Правила розыгрыша

Сообщество самородков
  • Вы должны подписаться на мою учетную запись Nuggets, чтобы быть эффективными.Домашняя страница;

  • Используйте лотерейный помощник WeChat, чтобы случайным образом разыграть розыгрыш для сообщества Nuggets;

    掘金抽奖

Публичный аккаунт WeChat
  • Вам нужно обратить внимание на мой публичный аккаунт WeChat, чтобы быть эффективным;

    情情说

  • Используйте помощника по лотерее WeChat, чтобы случайным образом выбрать общедоступную учетную запись WeChat;

    微信公众号抽奖