2.6 Netty核心模块概述
2.6.1 Bootstrap / ServerBootstrap
-
Bootstrap意为引导,主要作用是配置整个Netty程序。
-
常用方法
public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup)
: 用于服务端设置两个EventLooppublic ServerBootstrap group(EventLoopGroup group)
: 客户端设置一个EventLoopchannel()
: 设置服务器端通道实现option()
: 给 ServerChannel 添加配置childOption()
: 给接收到的通道添加配置childHandler()
:设置业务处理类
2.6.2 Future / ChannelFuture
- 异步操作监听
- 常用方法:
- Channel channel() : 返回当前正在进行IO的通道
- ChannFuture.sync() : 等待异步操作执行完毕
2.6.3 Channel
- Netty 的网络通信组件,用户执行网络的IO操作
- 调用时立即返回一个ChannelFuture实例
- 不同协议,不同阻类型的连接都有不同的Channel对应
- NioSocketChannel:异步客户端TCP Socket连接
- NioServerSocketChannel:异步服务端TCP Socket连接
- NioDatagramChannel:异步UDP连接
- NioSctpChannel:异步sctp连接
- NioSctpServerChannel:异步sctp服务器连接
2.6.4 Selector
- 监听多个连接的Channel事件
- Channel注册到Selector中
2.6.5 ChannelHandler
- 拦截/处理IO事件,并将其转发到对应的ChannelPipeline继续处理
- 实现类
- ChannelInboundHandler : 处理入站IO事件
- ChannelOutboundHandler : 处理出站IO事件
- 适配器
- ChannelInboundHandlerAdapter : 处理入站IO事件
- ChannelOutboundHandlerAdapter : 处理出站IO事件
- ChannelDuplexHandler : 处理入/出站IO事件
2.6.6 编码器和Handler调用机制
-
ChannelHandler充当了处理入站出站数据的应用程序逻辑的容器。
- e.g. 实现ChannelInboundHandler接口(或者ChannelInboundHandlerAdapter),就可以接收入站。实现出站接口
-
ChannelPupeline提供了ChannelHandler链的容器,以服务器端视角为例
- 入站:事件方向 客户端 -> 服务器端
- 出站:事件方向 服务器端 -> 客户端
2.6.7 Pipeline/ChannelPipeline
-
ChannelPipeline是Handler的一个集合(双向链表),负责处理inbound和outbound的事件
-
每个Channel与ChannelPipeline是一对一的关系
2.6.8 ChannelHandlerContext
- 包含Channel所有上下文信息,关联一个ChannelHandler
- 常用方法
- close() : 关闭通道
- flush() : 刷新
- writeAndFlush(Object msg) : 数据写道下一个ChannelHandler
2.6.9 ChannelOption
- ChannelOption.SO_BACKLOG: 用来初始化可连接队列大小
- ChannelOption.SO_KEEPALIVE: 一直保持连接活动状态
2.6.10 EventLoop组件
- EventLoopGroup是为了更好利用多核CPU资源
- 一个EventLoop维护一个Selector实例