-
ChannelHandler 回调方法的执行顺序
- handlerAdded() 当检测到新连接之后,调用
ch.pipeline().addLast(new XXXHandler());
之后的回调- channelRegistered() 当前的 channel 的所有的逻辑处理已经和某个 NIO 线程建立了绑定关系
- channelActive() channel 的 pipeline 中已经添加完所有的 handler,并且绑定好一个 NIO 线程之后,这条连接算是真正激活了,接下来就会回调到此方法。
- channelRead() 收到发来的数据,每次都会回调此方法,表示有数据可读。
- channelReadComplete() 数据读取完毕回调此方法
- channelInactive() 表示这条连接已经被关闭了,这条连接在 TCP 层面已经不再是 ESTABLISH 状态了
- channelUnregistered() 表示与这条连接对应的 NIO 线程移除掉对这条连接的处理
- handlerRemoved() 这条连接上添加的所有的业务逻辑处理器都被移除掉后调用
用法举例
- handlerAdded() 与 handlerRemoved()可以用在一些资源的申请和释放
channelActive() 与 channelInActive()可以统计单机的连接数,
channelActive()
被调用,连接数加一,channelInActive()
被调用,连接数减一。channelActive() 还可以实现ip黑白名单的过滤channelRead()用来拆包读取信息
channelReadComplete()实现批量刷新的机制,这样channelRead()中只使用
write()
方法而不用writeAndFlush()每次都刷新写入到缓存,从而提高性能。