• ChannelHandler 回调方法的执行顺序

Netty-channelHandler 的生命周期

  1. handlerAdded() 当检测到新连接之后,调用 ch.pipeline().addLast(new XXXHandler()); 之后的回调
  2. channelRegistered() 当前的 channel 的所有的逻辑处理已经和某个 NIO 线程建立了绑定关系
  3. channelActive() channel 的 pipeline 中已经添加完所有的 handler,并且绑定好一个 NIO 线程之后,这条连接算是真正**了,接下来就会回调到此方法。
  4. channelRead() 收到发来的数据,每次都会回调此方法,表示有数据可读。
  5. channelReadComplete() 数据读取完毕回调此方法
  6. channelInactive()  表示这条连接已经被关闭了,这条连接在 TCP 层面已经不再是 ESTABLISH 状态了
  7. channelUnregistered()  表示与这条连接对应的 NIO 线程移除掉对这条连接的处理
  8. handlerRemoved() 这条连接上添加的所有的业务逻辑处理器都被移除掉后调用

用法举例

  1. handlerAdded() 与 handlerRemoved()可以用在一些资源的申请和释放
  2. channelActive() 与 channelInActive()可以统计单机的连接数,channelActive() 被调用,连接数加一,channelInActive() 被调用,连接数减一。channelActive() 还可以实现ip黑白名单的过滤

  3. channelRead()用来拆包读取信息

  4. channelReadComplete()实现批量刷新的机制,这样channelRead()中只使用write() 方法而不用writeAndFlush()每次都刷新写入到缓存,从而提高性能。

相关文章:

  • 2021-11-18
  • 2021-08-25
  • 2021-09-03
  • 2021-12-12
  • 2021-11-13
  • 2022-12-23
  • 2021-11-03
  • 2021-11-05
猜你喜欢
  • 2021-10-15
  • 2022-12-23
  • 2021-10-01
  • 2021-07-31
  • 2021-09-01
  • 2021-08-22
相关资源
相似解决方案