1. Netty 核心组件
EventLoop(Group)
Channel
ChannelHandler
ChannelPipeline
ChannelFuture
Channel、EventLoop(Group) 、ChannelFuture、ChannelHandler、ChannelPipeline 再理解:
- Channel:相当于 Socket
- ChannelFuture:异步通知
- EventLoop:控制、多线程处理、并发
- ChannelHandler:充当了所有处理入站和出站数据的应用程序逻辑的地方
- ChannelPipeline:提供了ChannelHandler 链的容器,并定义了用于在该链上传播入站和出站事件流的API。
2. 流程
Channel:
EventLoop、EventLoopGroup:
EventLoop、Channel 关系说明:
- 一个 EventLoopGroup 包含一个或者多个 EventLoop
- 一个 EventLoop 在它的生命周期内只和一个 Thread 绑定
- 所有由 EventLoop 处理的I/O 事件都将在它专有的Thread 上被处理
- 一个Channel 在它的生命周期内只注册于一个EventLoop
- 一个EventLoop 可能会被分配给一个或多个Channel
ChannelHandler:
当 ChannelHandler 被添加到 ChannelPipeline 时,它将会被分配一个 ChannelHandlerContext,代表了 ChannelHandler 和ChannelPipeline 之间的绑定。
物理结构上看:
逻辑视图上看:处理数据时入站、出站 Handler 分开。
ByteBuf:
网络数据的基本单位总是字节。Java NIO 提供了 ByteBuffer 作为它的字节容器,但是这个类使用起来过于复杂,而且也有些繁琐。Netty 的 ByteBuffer 替代品是 ByteBuf。