Ответ
Выбор между Jetty и Netty определяется уровнем абстракции и типом решаемой задачи.
| Критерий | Jetty | Netty |
|---|---|---|
| Уровень | Высокоуровневый сервер приложений (Servlet-контейнер). | Низкоуровневый сетевой фреймворк для асинхронного ввода-вывода (NIO). |
| Основное назначение | Запуск веб-приложений (REST API, MVC) с поддержкой стандартов (Servlet, WebSocket). | Построение высокопроизводительных сетевых серверов и клиентов для кастомных протоколов. |
| Типичный use-case | Embedded-сервер в Spring Boot, традиционные веб-приложения. | Чат-серверы, прокси-серверы, кастомные бинарные протоколы (например, для игр), клиенты/серверы для RPC (gRPC). |
| Ключевая абстракция | Servlet, Filter, HttpServletRequest/Response. |
Channel, EventLoop, ChannelHandler, ByteBuf. |
Когда использовать Jetty:
- Вам нужен легкий, встраиваемый сервер для Spring Boot приложения.
- Приложение построено на Servlet API, JSP или требует поддержки HTTP/2, WebSocket по стандарту.
- Приоритет — простота настройки и быстрый старт.
Когда использовать Netty:
- Требуется максимальная производительность и низкие задержки для сетевых операций.
- Необходимо реализовать нестандартный сетевой протокол поверх TCP/UDP.
- Вы строите высоконагруженный middleware (шлюз, балансировщик, прокси).
Пример конфигурации Jetty в Spring Boot (application.yml):
server:
port: 8080
# Spring Boot использует Tomcat по умолчанию.
# Для Jetty нужно исключить tomcat и добавить jetty-starter.
Итог: Jetty — для веб-приложений, Netty — для сетевых сервисов. Многие высокоуровневые фреймворки (например, gRPC, Spring WebFlux) используют Netty "под капотом".