Netty NIO 开发指南
服务端创建
步骤:
- 创建ServerBootstrap实例。该类有着非常多的设置参数,因此采用Builder模式。
- 设置并绑定Reactor线程池。其实就是EventLoopGroup,就是一个EventLoop的数组。
- 设置并绑定服务端Channel。即NioServerSocketChannel。NioEventLoopGroup实际就是Reactor线程池,负责调度和执行客户端的接入、网络读写事件的处理、用户自定义任务和定时任务的执行。
- 链路建立的时候创建并初始化ChannelPipeline。并不是NIO服务端必须的,本质就是一个负责处理网络事件的职责链,负责管理和执行ChannelHandler。
- 典型网络事件:
- 链路注册、链路激活、链路断开、接收到请求消息、请求消息接收并处理完毕、发送应答消息、链路发生异常、发生用户自定义事件。
- 初始化ChannelPipeline完成之后,添加并设置ChannelHandler。
- 实用系统ChannelHandler:
- 系统编解码框架——ByteToMessageCodec;
- 通用基于长度的半包解码器——LengthFieldBasedFrameDecoder;
- 码流日志打印Handler——LoggingHandler
- SSL安全认证Handler——SslHandler
- 链路空闲检测Handler——IdleStateHandler;
- 流量整形Handler——ChannelTrafficShapingHandler;
- Base64编解码——Base64Decoder和Base64Encoder
- 实用系统ChannelHandler:
- 绑定并启动监听端口。
- Selector轮询。由Reactor线程NioEventLoop负责调度和执行Selector轮询操作,选择准备就绪的Channel。
- 当轮询到准备就绪的Channel之后,就由Reactor线程NioEventLoop执行ChannelPipeline的相应方法,最终调度并执行ChannelHandler。
- 执行Netty系统ChannelHandler和用户添加定制的ChannelHandler。
backlog指定了内核为此套接口排队的最大连接个数,对于给定的监听套接口,内核要维护两个队列:未链接队列和已连接队列,根据TCP三次握手过程中的三个分节来分隔这两个队列。