《Netty学习》(四)ChannelHandler学习

ChannelHandler

我们知道 Netty使用了异步的事件驱动模型,来触发网络I/O的各种操作。
所以对于channel通道的事件处理必须有一定的了解。
从字面上看,channelHandler:通道处理器,拥有着对channel不同状态的事件处理。
  • 生命周期
    • handlerAdded 将channelHandler添加到channelPipeline中时被调用
    • handlerRemoved 将channelHandler从channelPipeline移除时被调用
    • exceptionCaught 在整个channelPipeline中发生异常时被调用

现在我们不难看出channelPipeline 管理着channelHandler群。

  • 类图

    这里写图片描述

这里我们能看到两个很重要的处理器:入站处理器出站处理器
那何为入站何为出站:远离自身节点的操作称为出站,反之入站。

  • ChannelInboundHandler 入站处理器

    • 这里写图片描述

    netty内部提供了ChannelInboundHandlerAdapter 适配类实现入站处理器并且处理器适配器(类图中的ChannelHandlerAdapter )。实现了入站处理器的所有方法,目的是将消息转发到ChannelPipeline的下一个ChannelHandler。

    (这里面要通过ChannelHandlerContext 上下文,简介:当ChannelHandler添加到ChannelPipeline时,会创建一个ChannelHandlerContext上下文,管理着与其他ChannelHandler的交互)
    但是重写ChannelInboundHandlerAdapter 的channelRead方法时需要手动的释放已读的消息。ReferenceCountUtil.release(msg)。
    所以可以使用simpleChannelInboundHandler,它会自动释放。

  • ChannelOutboundHandler 出站处理器
    这里写图片描述
    ChannelOutboundHandler 的强大功能是可以按需推迟操作或者事件。例如,如果远程节点的写入被暂停是,你可以推迟冲刷操作并在稍后继续。它也拥有着自己的适配器类ChannelOutboundHandlerAdapter。
    也实现了ChannelOutboundHandler的所有功能,同样通过上下文传递到下一个处理器。

    接下来我们说说在出站处理器中两个比较重要的变量:
    ChannelPromiseChannelFuture
    在出站处理器的大部分方法中都要ChannelPromise参数,它是ChannelFuture的一个子类,表示着操作通知,它拥有这setSuccess()和setFailure(),承载着异步操作的结果。

  • ChannelHandlerAdapter 适配器类
    提供着对入站处理器接口或出站处理器的所有实现。

以上只是我个人理解,仅供参考,如有错误,请包涵指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值