关于Netty Pipeline中Handler的执行顺序问题

最近在学习Netty框架,根据官网的教程学着做了几个小测试,都成功了,后面开始试着写自己的应用的时候出了问题:Server发出的数据到达Client之后一直解码失败,折腾了好久,对比着官方的实例代码一步步走,最后终于在ChannelInitializer中发现了问题。原来我是这样写的:

	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开始查找,是我的理解错了。

刚开始学习,很多地方只是一知半解,自己说得不清不楚,还得继续学习啊。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值