《Netty学习》(四)ChannelHandler学习
来源:互联网 发布:redis数据存储在哪里 编辑:程序博客网 时间:2024/06/13 09:05
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的所有功能,同样通过上下文传递到下一个处理器。接下来我们说说在出站处理器中两个比较重要的变量:
ChannelPromise和ChannelFuture。
在出站处理器的大部分方法中都要ChannelPromise参数,它是ChannelFuture的一个子类,表示着操作通知,它拥有这setSuccess()和setFailure(),承载着异步操作的结果。ChannelHandlerAdapter 适配器类
提供着对入站处理器接口或出站处理器的所有实现。
以上只是我个人理解,仅供参考,如有错误,请包涵指正!
- 《Netty学习》(四)ChannelHandler学习
- netty源码学习三(channel、channelHandler、channelPipeline)
- Netty学习笔记(三) ChannelPipeline和ChannelHandler
- 一起学Netty(四)之 ChannelHandler,ChannelHandlerContext,ChannelPipeline
- 一起学Netty(四)之 ChannelHandler,ChannelHandlerContext,ChannelPipeline
- 一起学Netty(四)之 ChannelHandler,ChannelHandlerContext,ChannelPipeline
- netty学习(四)事件传递
- Netty学习(四)—LengthFieldBasedFrameDecoder解码器
- Netty(二)ChannelPipeline和ChannelHandler
- netty中的ChannelHandler
- Netty教程-ChannelHandler
- Netty封装的ChannelHandler
- netty中的ChannelHandler
- 自顶向下深入分析Netty(八)--ChannelHandler
- netty源码分析之-ChannelHandler与ChannelContext详解(7)
- Netty 学习(1)
- Netty 学习(2)
- Netty 学习(3)
- 关于正则表达式的小笔记
- xlistView_footer
- LeetCode-Add Two Numbers
- 周中训练笔记4——乌鲁木齐网络赛&沈阳网络赛
- flume架构及源码解析
- 《Netty学习》(四)ChannelHandler学习
- 周末训练笔记(二)
- 机器学习: KNN--python
- Mybatis中#和$的区别
- quartz学习笔记4:lock
- 国电南瑞并网光伏系统发电性能评估项目开发总结
- DrawerLayout的侧拉布局添加的权限
- LeetCode-longest-palindromic-substring
- 《统计学习方法》笔记二