数据处理器ChannelHandler

ChannelPipeline不是单独存在,它肯定会和Channel、ChannelHandler、ChannelHandlerContext关联在一起。

一、ChannelHandler

ChannelHandler下主要是两个子接口:

  • ChannelInboundHandler(入站): 处理输入数据和Channel状态类型改变。
    • 适配器:ChannelInboundHandlerAdapter(适配器设计模式)
    • 常用的 SimpleChannelInboundHandler
  • ChannelOutboundHandler(出站)::处理输出数据
    • 适配器:ChannelOutboundHandlerAdapter

每一个Handler都一定会处理出站或者入站(可能两者都处理数据),例如对于入站的Handler可能会继承SimpleChannelInboundHandler或者hannelInboundHandlerAdapter,而SimpleChannelInboundHandler又是继承于ChannelInboundHandlerAdapter,最大的区别在于SimpleChannelInboundHandler会对没有外界引用的资源进行一定的清理,并且入站的消息可以通过泛型来规定。

这里为什么有适配器模式呢?

我们在写自定义Handler时候,很少会直接实现上面两个接口,因为接口中有很多默认方法需要实现,所以这里就采用了设配器模式,ChannelInboundHandlerAdapter和ChannelInboundHandlerAdapter就是设配器模式的产物,让它去实现上面接口,实现它所有方法。那么你自己写自定义Handler时,只要继承它,就无须重写上面接口的所有方法了。

Channel 生命周期(执行顺序也是从上倒下)

  • hannelRegistered: channel注册到一个EventLoop。
  • channelActive: 变为活跃状态(连接到了远程主机),可以接受和发送数据
  • channelInactive: channel处于非活跃状态,没有连接到远程主机
  • channelUnregistered: channel已经创建,但是未注册到一个EventLoop里面,也就是没有和Selector绑定

猜你喜欢

转载自www.cnblogs.com/myitnews/p/12213046.html