Статьи

Создайте простое приложение Netty с и без Spring

Как асинхронная неблокируемая структура ввода-вывода (NIO), Netty используется для быстрой разработки поддержки масштабируемых протокольных серверов и клиентов. Создание низкоуровневых сетевых серверов и клиентов относительно просто с Netty. Разработчики могут работать на уровне сокетов, например, создавать оригинальные протоколы связи между клиентами и серверами. 

Netty поддерживает все блокирующие и неблокирующие унифицированные API-интерфейсы, модель сменяемых потоков и SSL / TLS. Все запросы выполняются асинхронно в отдельном потоке с неблокирующим сервером (функция не должна блокировать цикл обработки событий). Это противоречит модели блокирующего сервера, которая обычно использует отдельный поток для выполнения каждого запроса. Без необходимости переключения или создания потоков при увеличении нагрузки неблокируемая модель снижает накладные расходы и ускоряет разработку по мере расширения трафика. 

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

Команда Netty.io сделала замечательную работу по упрощению использования Netty при всей его мощности, но она по-прежнему более сложна, чем библиотеки более высокого уровня (такие как Spring Boot WebFlux). Так зачем его использовать?

Netty разработан для того, чтобы сделать реализацию пользовательских сетевых протоколов относительно простой. HTTP хорош, но это универсальный протокол, в основном хорошо подходящий для большинства вещей. Но если вы постоянно передаете пользовательские структурированные данные между серверами и клиентами (большие файлы, потоковое мультимедиа, игровые данные в реальном времени и т. Д.), Вы можете добиться большего. Netty позволяет вам писать свой собственный сетевой протокол, адаптированный к вашим конкретным требованиям, оптимизируя поток трафика для вашей конкретной ситуации, без лишних затрат, таких как HTTP или FTP.

Однако, даже если вы не собираетесь писать свой собственный протокол TCP, вы все равно можете использовать возможности Netty. Spring WebFlux — это ответ Spring на неблокирующее и реактивное программирование. Это альтернатива традиционной (блокирующей) архитектуре Spring MVC. По умолчанию Spring Boot WebFlux Starter работает на встроенном сервере Netty. В этой конфигурации вы можете думать о WebFlux как о реактивном, неблокирующем прикладном уровне HTTP, построенном на основе совершенства сокетов NIO от Netty.

В этом руководстве вы создадите простое приложение «Hello world» в Netty. Затем вы создадите такое же приложение «Hello world» в Spring Boot WebFlux. Наконец, вы собираетесь добавить в приложение имя входа OAuth 2.0, используя Okta в качестве поставщика OAuth 2.0 .

Установите зависимости проекта

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

Java 11 : этот проект использует Java 11. Вы можете установить OpenJDK, следуя инструкциям на  веб-сайте OpenJDK  или используя  SDKMAN .

HTTPie : это простая утилита командной строки для создания HTTP-запросов, которую вы будете использовать для тестирования приложения REST. Это также любимый разработчиками Okta. Установите в соответствии с инструкциями на их сайте .

Учетная запись разработчика Okta : вы будете использовать Okta в качестве поставщика OAuth / OIDC для добавления аутентификации входа OAuth2 в приложение. Зарегистрируйте  бесплатную учетную запись разработчика Okta , если вы еще этого не сделали.

Вы также должны клонировать  репозиторий GitHub этого блога .


Оболочка