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

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

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

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

时间: 2024-10-09 22:28:49

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

7.Netty中 handler 的执行顺序

1.Netty中handler的执行顺序 Handler在Netty中,无疑占据着非常重要的地位.Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的解码编码.拦截指定的报文. 统一对日志错误进行处理.统一对请求进行计数.控制Handler执行与否.一句话,没有它做不到的只有你想不到的 Netty中的所有handler都实现自ChannelHandler接口.按照输入输出来分,分为ChannelInboundHandler.ChannelOutboundHan

hadoop27---netty中handler的执行顺序

Netty是基于Java NIO的网络应用框架. Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议.Netty提供了一种新的方式来使开发网络应用程序,这种新的方式使得它很容易使用和有很强的扩展性.Netty的内部实现时很复杂的,但是Netty提供了简单易用的api从网络处理代码中解耦业务逻辑.Netty是完全基于NIO实现的,所以整个Netty都是异步的. 网络应用程序通常需要有较高的可扩展性,无论是Netty还是

【转】Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)

http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示

(转)Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)

自:http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图

继承中代码的执行顺序

在继承中代码的执行顺序为:1.父类静态对象和静态代码块   2.子类静态对象和静态代码块 3.父类非静态对象和非静态代码块  4.父类构造函数 5.子类非静态对象和非静态代码块  6.子类构造函数 1.对于本题来说:在只想new Sub(5)的时候,父类先初始化了 int flag = 1,然后执行父类的构造函数Super(),父类构造函数中执行的test()方法,因子类是重写了test()方法的,因此父类构造函数中的test()方法实际执行的是子类的test()方法,所以输出为Sub.test

jquery的AJAX中各个事件执行顺序

jquery的AJAX中各个事件执行顺序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.ajaxSuccess(全局事件) 6.error 7.ajaxError (全局事件) 8.complete 9.ajaxComplete(全局事件) 10.ajaxStop(全局事件)

【转】Unity3D中脚本的执行顺序和编译顺序

支持原文,原文请戳: Unity3D中脚本的执行顺序和编译顺序 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示,然后按照顺序将脚本绑定到对

aspx、matser、ascx中PageLoad的执行顺序

顺序即为:aspx.matser.ascx aspx.matser.ascx中PageLoad的执行顺序,码迷,mamicode.com

netty4 Handler的执行顺序

转载:https://my.oschina.net/jamaly/blog/272385 Handler在netty中,无疑占据着非常重要的地位.Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的解码编码.拦截指定的报文.统一对日志错误进行处理.统一对请求进行计数.控制Handler执行与否.一句话,没有它做不到的只有你想不到的. Netty中的所有handler都实现自ChannelHandler接口.按照输出输出来分,分为ChannelInboundHa