分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

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

发布时间:2023-09-06 01:44责任编辑:郭大石关键词:暂无标签

原文地址:http://blog.csdn.net/wgyvip/article/details/25637651

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

[java] view plain copy
 
  1. pipeline.addLast("StringDecoder", new StringDecoder(Charset.forName("UTF-8")));  
  2.    pipeline.addLast("ServerHandler", new ServerHandler());  
  3.    pipeline.addLast("StringEncoder", new StringEncoder(Charset.forName("UTF-8")));  

官网的教程是这样写的:

[java] view plain copy
 
  1. pipeline.addLast("StringDecoder", new StringDecoder(Charset.forName("UTF-8")));  
  2. pipeline.addLast("StringEncoder", new StringEncoder(Charset.forName("UTF-8")));  
  3. pipeline.addLast("ServerHandler", new ServerHandler());  

注意到Handler在Pipeline中的顺序不一样。在Netty文档里看到Handler在Pipeline中的执行顺序是InboundHandler顺序执行,OutboundHandler逆序执行,我原以为所谓的你须执行会从Pipeline的最后一项开始执行,所以讲所有的OutboundHandler都放在了最后,为了看着方便,其实不是这样的。在InboundHandler执行完成需要调用Outbound的时候,比如ChannelHandlerContext.write()方法,Netty是直接从该InboundHandler返回逆序的查找该InboundHandler之前的OutboundHandler,并非从Pipeline的最后一项Handler开始查找,是我的理解错了。

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

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

原文地址:https://www.cnblogs.com/leodaxin/p/8486297.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved