Ответ
Netty — это асинхронный event-driven фреймворк для создания высокопроизводительных сетевых приложений на Java. Он использует неблокирующий ввод-вывод (NIO) и эффективно управляет тысячами одновременных соединений.
Ключевые компоненты:
- Channel — абстракция сетевого соединения (сокета).
- EventLoop — обрабатывает события ввода-вывода для одного или нескольких каналов.
- ChannelHandler — обрабатывает входящие/исходящие события (например, декодирование данных, бизнес-логика).
- ChannelPipeline — цепочка обработчиков для одного канала.
Пример простого эхо-сервера:
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new EchoServerHandler()); // Пользовательский обработчик
}
});
ChannelFuture f = b.bind(8080).sync();
f.channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
Плюсы: низкая задержка, высокая пропускная способность, модульность. Минусы: сложность отладки асинхронного кода, кривая обучения. Применение: HTTP/WebSocket серверы, прокси, RPC-фреймворки, системы реального времени.