Skip to content

Netty 学习笔记

更新: 7/22/2025 字数: 0 字 时长: 0 分钟

1. Netty 简介

Netty 是一个异步的、事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。

1.1. 为什么选择 Netty

  • 高性能:基于 Java NIO,提供了非阻塞的、异步的 I/O 模型,性能远超传统的阻塞 I/O。
  • 易于使用:封装了复杂的 NIO 操作,提供了简单易用的 API。
  • 功能强大:内置了对多种协议(如 HTTP, WebSocket, Protobuf)的支持,并且易于扩展。
  • 社区活跃:拥有庞大而活跃的社区,文档齐全,遇到问题容易找到解决方案。

2. 核心组件

2.1. Channel(通道)

  • 介绍:网络通信的载体,代表了一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执行一个或多个不同 I/O 操作的程序组件)的开放连接。
  • 常用实现
    • NioSocketChannel:用于客户端的 TCP 连接。
    • NioServerSocketChannel:用于服务端的 TCP 连接。

2.2. EventLoop(事件循环)

  • 介绍:处理连接的生命周期内所发生的事情。一个 EventLoop 由一个线程驱动,处理多个 Channel 上的 I/O 事件。
  • EventLoopGroupEventLoop 的分组,通常一个 Netty 应用会有两个 EventLoopGroup,一个用于接收进来的连接(boss group),另一个用于处理被接收连接的流量(worker group)。

2.3. ChannelHandler(通道处理器)

  • 介绍:处理 I/O 事件或拦截 I/O 操作,并将其转发到其 ChannelPipeline(通道管道)中的下一个处理程序。
  • 常用适配器
    • ChannelInboundHandlerAdapter:处理入站 I/O 事件。
    • ChannelOutboundHandlerAdapter:处理出站 I/O 操作。

2.4. ChannelPipeline(通道管道)

  • 介绍:为 Channel 提供了一个容器,用于存放和组织 ChannelHandler。每个 Channel 都有自己的 ChannelPipeline

2.5. Bootstrap & ServerBootstrap

  • Bootstrap:用于客户端或无连接协议的启动和配置。
  • ServerBootstrap:用于服务器端的启动和配置。

3. Netty 模型

Netty 采用了经典的 Reactor 模型。

  • 单 Reactor 单线程:一个线程处理所有的 I/O 操作,包括连接、读写等。实现简单,但性能有限。
  • 单 Reactor 多线程:一个 Reactor 线程负责监听和接受连接,然后将建立的连接交给一个 worker 线程池来处理读写。
  • 主从 Reactor 多线程:一个主 Reactor 负责监听和接受连接,然后将连接分配给一个从 Reactor,每个从 Reactor 有自己的线程池来处理读写。这是 Netty 推荐使用的模型。

Netty 主从 Reactor 模型

贡献者

The avatar of contributor named as LI SIR LI SIR

页面历史