Dotnetty 源码之:handler如何区分InBound 还是 OutBound

    读Dotnetty代码时,发现所有 handler 的根是 IChannelHandler 接口,这个接口里面的方法是按照 InBound,OutBound 分组的:

InBound方法:

  • ChannelActive 
  • ChannelInactive 
  • ChannelRead 
  • ChannelReadComplete 
  • ChannelRegistered 
  • ChannelUnregistered 
  • ChannelWritabilityChanged 
  • UserEventTriggered
  • ExceptionCaught 

OutBound方法:

  • BindAsync 
  • CloseAsync 
  • ConnectAsync 
  • DeregisterAsync 
  • DisconnectAsync 
  • Flush
  • Read
  • WriteAsync 

ChannelHandlerAdapter 作为 IChannelHandler 的默认实现,上述方法均被标记为 [Skip],进而在 AbstractChannelHandlerContext 中使用该标记来生成枚举 SkipFlags,该枚举类型中给出了 InBound 和 OutBound 的取值为上述方法枚举值的或,也就是说,判断一个 handler 是InBound 还是OutBound 就看该 handler 的上述方法中是否有 没有被标记为 [Skip] 的重载。

解码作为典型的InBound hanlder,我们从其基类 ByteToMessageDecoder 可以看到,ChannelInactive  ChannelRead  ChannelReadComplete 这几个 InBound 方法被 override 了。

编码作为典型的OutBound handler,我们从其基类 MessageToByteEncoder 可以看到,WriteAsync  方法被 override 了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值