关于Netty Pipeline中Handler的执行顺序问题
2014-05-12 17:29
330 查看
最近在学习Netty框架,根据官网的教程学着做了几个小测试,都成功了,后面开始试着写自己的应用的时候出了问题:Server发出的数据到达Client之后一直解码失败,折腾了好久,对比着官方的实例代码一步步走,最后终于在ChannelInitializer中发现了问题。原来我是这样写的:
官网的教程是这样写的:
注意到Handler在Pipeline中的顺序不一样。在Netty文档里看到Handler在Pipeline中的执行顺序是InboundHandler顺序执行,OutboundHandler逆序执行,我原以为所谓的你须执行会从Pipeline的最后一项开始执行,所以讲所有的OutboundHandler都放在了最后,为了看着方便,其实不是这样的。在InboundHandler执行完成需要调用Outbound的时候,比如ChannelHandlerContext.write()方法,Netty是直接从该InboundHandler返回逆序的查找该InboundHandler之前的OutboundHandler,并非从Pipeline的最后一项Handler开始查找,是我的理解错了。
刚开始学习,很多地方只是一知半解,自己说得不清不楚,还得继续学习啊。
pipeline.addLast("StringDecoder", new StringDecoder(Charset.forName("UTF-8"))); pipeline.addLast("ServerHandler", new ServerHandler()); pipeline.addLast("StringEncoder", new StringEncoder(Charset.forName("UTF-8")));
官网的教程是这样写的:
pipeline.addLast("StringDecoder", new StringDecoder(Charset.forName("UTF-8"))); pipeline.addLast("StringEncoder", new StringEncoder(Charset.forName("UTF-8"))); pipeline.addLast("ServerHandler", new ServerHandler());
注意到Handler在Pipeline中的顺序不一样。在Netty文档里看到Handler在Pipeline中的执行顺序是InboundHandler顺序执行,OutboundHandler逆序执行,我原以为所谓的你须执行会从Pipeline的最后一项开始执行,所以讲所有的OutboundHandler都放在了最后,为了看着方便,其实不是这样的。在InboundHandler执行完成需要调用Outbound的时候,比如ChannelHandlerContext.write()方法,Netty是直接从该InboundHandler返回逆序的查找该InboundHandler之前的OutboundHandler,并非从Pipeline的最后一项Handler开始查找,是我的理解错了。
刚开始学习,很多地方只是一知半解,自己说得不清不楚,还得继续学习啊。
相关文章推荐
- 关于js在html中执行顺序的问题
- 关于js中循环遍历中顺序执行多个嵌套ajax的问题
- netty 学习 (2)Handler的执行顺序
- 关于verilog中initial和always过程快的执行顺序问题
- netty 学习 (2)Handler的执行顺序
- 关于不同语言的参数执行顺序问题
- 关于Java中静态属性和静态代码块的执行顺序问题
- 关于UIView 中init(包括重写) 与 viewDidLoad执行顺序问题
- 关于JS执行顺序的问题
- Netty学习:ChannelHandler执行顺序详解,附源码分析
- netty 学习 (2)Handler的执行顺序
- 关于j2me执行顺序的问题
- Java学习笔记——关于继承执行顺序问题
- 关于Android Fragment生命周期以及其他方法的调用执行顺序问题
- 关于基类和派生类的构造函数和析构函数的执行顺序问题
- C++关于多个连续流插入符<<中执行的顺序问题
- 关于C++输出流cout的执行顺序问题
- 关于ENTER_FRAME的执行顺序问题
- 关于FLEX中AS执行顺序的问题
- 关于 Handler 重复执行 问题