Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
предисловие
Мне как 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 нулевое копирование в основном отражается на оптимизации операций с данными.
- Используя класс CompositeByteBuf, предоставленный Netty, несколько ByteBufs можно объединить в один логический ByteBuf, избегая копирования между каждым ByteBuf.
- ByteBuf поддерживает операцию среза, поэтому ByteBuf можно разбить на несколько ByteBuf, которые совместно используют одну и ту же область хранения, избегая копирования памяти.
- Обернут FileRegion
FileChannel.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:
Подробное введение см. в моей предыдущей статье, ссылки по теме:Серия анализов исходного кода Netty (11) Подробное объяснение принципа работы Netty
резюме
На самом деле, прежде чем изучать исходный код Netty, вы должны сначала стать квалифицированным рабочим и освоить базовую теорию. Затем переходите к изучению связанных блогов, исходного кода и других ресурсов. Я надеюсь, что приведенные выше заметки Нетти помогут нуждающимся!
запомнить после прочтенияНравится, Следуй, ИзбранноеЭй! ! !