Золото девять серебро десять, как много вы знаете об основных знаниях Нетти?

Java задняя часть Netty
Золото девять серебро десять, как много вы знаете об основных знаниях Нетти?

Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.

предисловие

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

Я собрал некоторые материалы шаблона резюме, надеясь помочь своим друзьям:

Облачный диск Baidu:

Связь:https://pan.baidu.com/s/1Xr-uIzhdDBo4qxMQ7kITCQКод извлечения:y9jq

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

Грамотно составленное резюме и ранний поиск работы, осеннее руководство по подбору персонала для программиста!

текст

БИО, НИО и АИО

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

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

  • AIO: Принятие订阅-通知Mode, то есть приложение регистрирует IO listeners в операционной системе, а затем продолжает заниматься своими делами. Когда в операционной системе происходит событие ввода-вывода и данные готовы, оно активно уведомляет приложение и запускает соответствующую функцию.

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

Углубленный анализ Java IO (2) BIO

Углубленный анализ Java IO (3) NIO

Углубленный анализ Java IO (4) AIO

Что такое Нетти? Зачем использовать Нетти?

Netty — это среда Java с открытым исходным кодом, предоставляемая JBOSS. Netty предоставляет платформу асинхронных, управляемых событиями сетевых приложений и инструменты для быстрой разработки высокопроизводительных и надежных сетевых серверных и клиентских программ.

несмотря на то чтоJAVA NIOа такжеJAVA AIOПлатформа обеспечивает поддержку мультиплексирования ввода-вывода/асинхронного ввода-вывода, но не обеспечивает хорошей инкапсуляции «информационного формата» верхнего уровня. Внедрить настоящее веб-приложение с помощью этих API непросто.

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

AIOНа практике нетNIOлучше.AIOСуществуют разные реализации на разных платформах, и в системе Windows используется технология асинхронного ввода-вывода:IOCP;Поскольку в Linux нет такой технологии асинхронного ввода-вывода, она используетepollМоделируйте асинхронный ввод-вывод. Так что производительность AIO под Linux не идеальна. AIO также не поддерживает UDP.

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

Подробнее читайте в моей предыдущей статье:

Серия анализа исходного кода Netty (2) Проектирование архитектуры Netty

Серия анализа исходного кода Netty (1) Обзор Netty

Потоковая модель Netty

Netty получает и обрабатывает пользовательские запросы на основе мультиплексора через модель Reactor.Он внутренне реализует два пула потоков, пул потоков босса и пул рабочих потоков.Потоки пула потоков босса отвечают за обработку события принятия запроса. Когда получено событие accept. Когда запрос сделан, инкапсулируйте соответствующий сокет вNioSocketChannel, и передать его в пул рабочих потоков, где пул рабочих потоков отвечает за запрошенныйreadа такжеwriteСобытие обрабатывается соответствующим обработчиком.

Подробнее читайте в моей предыдущей статье:Серия анализа исходного кода Netty (десять) Модель Reactor

Вы понимаете нулевую копию Нетти?

Нулевое копирование на уровне ОС обычно относится к предотвращению копирования данных туда и обратно между пространством пользователя и пространством ядра. На уровне Netty нулевое копирование в основном отражается на оптимизации операций с данными.

  1. Используя класс CompositeByteBuf, предоставленный Netty, несколько ByteBufs можно объединить в один логический ByteBuf, избегая копирования между каждым ByteBuf.
  2. ByteBuf поддерживает операцию среза, поэтому ByteBuf можно разбить на несколько ByteBuf, которые совместно используют одну и ту же область хранения, избегая копирования памяти.
  3. Обернут FileRegionFileChannel.tranferToДля обеспечения передачи файлов данные в файловом буфере могут быть отправлены напрямую на целевой канал, что позволяет избежать проблемы с копированием памяти, вызванной традиционным методом циклической записи.

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

Поймите принцип нулевого копирования в одной статье

Серия анализа исходного кода Netty (8) Как Netty добивается нулевого копирования

Каковы важные компоненты в Netty?

  • Канал: абстрактный класс сетевых операций Netty, он включает в себя основные операции ввода-вывода, такие как привязка, подключение, чтение, запись и т. д.
  • EventLoop: в основном сотрудничает с Channel для обработки операций ввода-вывода, чтобы обрабатывать то, что происходит в жизненном цикле соединения.
  • ChannelFuture: все операции ввода-вывода в инфраструктуре Netty являются асинхронными, поэтому нам нужен addListener() ChannelFuture, чтобы зарегистрировать ChannelFutureListener для прослушивания событий.Когда операция завершается успешно или не удается, прослушиватель автоматически активирует возвращаемый результат.
  • ChannelHandler: действует как логический контейнер для обработки всех входящих и исходящих данных. ChannelHandler в основном используется для обработки различных событий, событий здесь очень много, таких как соединение, прием данных, исключение, преобразование данных и т.д.
  • ChannelPipeline: предоставляет контейнер для цепочки ChannelHandler. При создании канала он автоматически назначается своему выделенному ChannelPipeline. Эта ассоциация является постоянной.
  • Начальная загрузка: в основном используется для настройки информации о запуске программы Netty сервера или клиента.
  • ByteBuf: Контейнер байтовых данных, обеспечивающий отношениеJava NIO ByteBufferлучший API.

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

Серия анализа исходного кода Netty (3) Обзор канала

Серия анализа исходного кода Netty (4) ChannelHandler

Серия анализа исходного кода Netty (5) Анализ исходного кода ChannelPipeline

Серия анализа исходного кода Netty (шесть) байтовый буфер ByteBuf (вкл.)

Серия анализа исходного кода Netty (семь) байтовый буфер ByteBuf (ниже)

Серия анализа исходного кода Netty (9) Класс руководства по программе Netty

Что такое вставка/распаковка TCP? Каково решение?

TCP обрабатывает данные в потоковом режиме. Полный пакет может быть разделен TCP на несколько пакетов для передачи, или небольшой пакет может быть инкапсулирован в большой пакет для передачи. Причины залипания/пакетизации TCP: размер байтов, записанных прикладной программой, больше, чем размер буфера отправки сокета, и произойдет распаковка, а данные, записанные прикладной программой, меньше размера буфера сокета, сетевая карта будет применяться Когда данные, записанные несколько раз, отправляются в сеть, возникает явление залипания пакета; когда выполняется TCP-сегмент размера MSS, когда длина TCP-пакета - длина TCP-заголовка > MSS , произойдет полезная нагрузка неупакованного кадра Ethernet (полезная нагрузка) больше, чем MTU (1500 байт) для фрагментации ip.

решение:

1. Используйте декодер, поставляемый с Netty

(1) пройтиFixedLengthFrameDecoderДекодер фиксированной длины для решениясообщение фиксированной длиныпроблема с липким пакетом;

(2) пройтиLineBasedFrameDecoderа такжеStringDecoderрешить сперевод строки возврата кареткиПроблема липких пакетов TCP как терминаторов сообщений;

(3) пройтиDelimiterBasedFrameDecoderспециальный декодер-разделитель для разрешенияспециальный символ в качестве терминатора сообщенияпроблема с липкими пакетами TCP;

(4) пройтиLengthFieldBasedFrameDecoder нестандартная длинаДекодер решает проблему липких пакетов TCP.

2. Пользовательский кодек сериализации

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

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

Серия анализа исходного кода Netty (12) Декодер Netty

Серия анализа исходного кода Netty (тринадцать) Кодировщик Netty

Серия анализа исходного кода Netty (14) Кодек Netty

Серия анализа исходного кода Netty (15) пользовательский декодер, кодировщик, кодек

Как работает Нетти

На следующем рисунке показан принцип работы Netty:

image-20210815210630321

Подробное введение см. в моей предыдущей статье, ссылки по теме:Серия анализов исходного кода Netty (11) Подробное объяснение принципа работы Netty

резюме

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

запомнить после прочтенияНравится, Следуй, ИзбранноеЭй! ! !