Netty4.x中文教程系列(三) ChannelHandler

Netty4.x中文教程系列(四)  ChannelHandler

上一篇文章详细解释了Hello World示例的代码。里面涉及了一些Netty框架的基础。

这篇文章用以解释ChannelHandler。笔者本身在以前写过文章ChannelHandler改动及影响 和 ChannelInitializer 学习 对Netty的.ChannelHandler做过阐述。里面主要描述了4.x版本相对于3.x版本的改动以及影响。并引用了一些文章。为大家详细的解释了ChannelHandler里面涉及架构。

1.在4.x版本中的ChannelHandler

ChannelHandler接口是Handler里面的最高的接口。

ChannelInboundHandler接口和ChannelOutboundHandler接口,继承ChannelHandler接口。

流程如下图:

  ChannelInBoundHandler负责数据进入并在ChannelPipeline中按照从上至下的顺序查找调用相应的InBoundHandler。

  ChannelOutBoundHandler负责数据出去并在ChannelPipeline中按照从下至上的顺序查找调用相应的OutBoundHandler。

2.在5.x版本中的改动

在5.x版本中。作者再次对ChannelHandler进行了改动。

在更新说明里可以看到:

作者简化了Handler的类型层次结构。

ChannelInboundHandler和ChannelOutboundHandler接口合并到ChannelHandler里面。

ChannelInboundHandlerAdapter,ChannelOutboundHandlerAdapter以及ChannelDuplexHandlerAdapter被取消,其功能被ChannelHandlerAdapter代替。

由于上述的改动,开发者将无法区分InBoundHandler和OutBoundHandler 所以CombinedChannelDuplexHandler 的功能也被ChannelHandlerAdapter代替。

有兴趣了解的可以看一下注释。假如不看也影响不大。因为5.x看上去改动很大,实际上框架的设计思路并没有改变。

  

注释:

  5.x版本中虽然删除了InBoundHandler和OutBoundHandler,但是在设计思想上InBound和OurBound的概念还是存在的。只不过是作者使用了另外一种方式去实现罢了。

  查看过4.x版本代码的朋友可能已经了解知道了。消息在管道中都是以ChannelHandlerContext的形势传递的。而InBound和OutBound主要作用是被当做ChannelPipeline管道中标识。用于Handler中相对应的调用处理,通过两个布尔值变量inBound和outBound来区分是进入还是出去。并以此来区分Handler并调用相应的方法,其实没有什么实际用途。于是作者在5.x版本中对此做出了优化。优化方案笔者感觉very nice。

  由于删除了InBoundHandler和OutBoundHandler的接口。作者在DefaultChannelHandlerContext中重写了findContextInBound()和findContextOutBound()方法。并且在方法里引入了参数mask。

  在类开始处定义静态终态的变量来标记4.x版本中定义的InBound和OutBound中的方法名(可以变相的认为是枚举)。在源代码中的实现是利用mask来获取对应的flag,最终实现使用mask来区分InBoundHandler亦或是OutBoundHandler。

这样的改动,优点显而易见。简化了层次结构,降低了框架的复杂度。同时功能上却没有什么变化。易于使用了解。

)

  目前在不涉及框架底层的情况下。笔者将继续使用Netty 4.0.14 final版本。正如第一章介绍所说。5.x版本作者并没有进行大规模的设计变更。仅仅只是局部的小部分修改。所以在版本没有稳定之前。教程都将采用4.0.14final为框架包。

3.认识Handler中的编解码器

编解码器在Netty框架中占了相当大的一部分代码量。由此可见其重要性。本章内容旨在阐述编解码器的基础。下一章会详细分类的按照框架的结构详解其余编解码器。

  在Netty的codec包内部我们可以看到很多的编解码器和一些异常捕获。

来自:  http://www.cnblogs.com/zou90512/p/3521250.html

时间: 2025-01-04 17:14:55

Netty4.x中文教程系列(三) ChannelHandler的相关文章

Netty4.x中文教程系列(四) ChannelHandler

这篇文章用以解释ChannelHandler.笔者本身在以前写过文章ChannelHandler改动及影响 和 ChannelInitializer 学习 对Netty的.ChannelHandler做过阐述.里面主要描述了4.x版本相对于3.x版本的改动以及影响.并引用了一些文章.为大家详细的解释了ChannelHandler里面涉及架构. 1.在4.x版本中的ChannelHandler ChannelHandler接口是Handler里面的最高的接口. ChannelInboundHand

Netty4.x中文教程系列(六) 从头开始Bootstrap

Netty4.x中文教程系列(六) 从头开始Bootstrap 其实自从中文教程系列(五)一直不知道自己到底想些什么.加上忙着工作上出现了一些问题.本来想就这么放弃维护了.没想到有朋友和我说百度搜索推荐了我的文章.瞬间有点小激动啊.决定自己要把这个教程系列完善下去.这里诚挚的想支持我的盆友们道歉.真的是让你们失望了.我居然有想放弃的这种丧心病狂的念头.以后绝对不会了. 其实伴随着对Netty的逐步深入学习.感觉自己对netty的了解仍然有所欠缺.加上笔者语文课是美术老师教的.所以..说多了都是泪

Netty4.x中文教程系列(四) 对象传输

Netty4.x中文教程系列(四)  对象传输 我们在使用netty的过程中肯定会遇到传输对象的情况,Netty4通过ObjectEncoder和ObjectDecoder来支持. 首先我们定义一个User对象,一定要实现Serializable接口: package mjorcen.netty.object; import java.io.Serializable; /** * User: hupeng Date: 14-6-3 Time: 上午1:31 */ public class Use

Netty4.x中文教程系列(二) Hello World !<转>

在中国程序界.我们都是学着Hello World !慢慢成长起来的.逐渐从一无所知到熟悉精通的. 第二章就从Hello World 开始讲述Netty的中文教程. 首先创建一个Java项目.引入一个Netty 框架的包.这个步骤我在本系列教程的后面就不在重复了. 先上一张我示例的项目工程图给大家看一下: 1.下载并为项目添加Netty框架 Netty的包大家可以从Netty官网:http://netty.io/downloads.html 下载 如图所示: Netty提供了三个主要版本的框架包给

Netty4.x中文教程系列(二) Hello World !

1.下载并为项目添加Netty框架 1. Netty的包大家可以从Netty官网:http://netty.io/downloads.html 下载 如图所示: Netty提供了四个个主要版本的框架包给大家下载. 3.9版本Final 说明这个版本是3.x版本中最新的版本.final意味着功能不再继续添加更新.仅为修改bug等提供继续的更新. 5.x版本由于是开始.不能排除是否稳定运行等问题.加上5.x在4.x的版本上略微修改的.在5.x稳定之前.不推荐大家学习使用. 本教程是基于Netty4.

Netty4.x中文教程系列(七)UDP协议

将近快一年时间没有更新Netty的博客.一方面原因是因为项目进度的问题.另外一方面是博主有一段时间去熟悉Unity3D引擎. 本章节主要记录博主自己Netty的UDP协议使用. 1. 构建UDP服务端 首先我们应该清楚UDP协议是一种无连接状态的协议.所以Netty框架区别于一般的有链接协议服务端启动程序(ServerBootstrap). Netty开发基于UDP协议的服务端需要使用Bootstrap 1 package dev.tinyz.game; 2 3 import io.netty.

struts2官方 中文教程 系列八:异常处理

在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列八:异常处理  即 http://www.cnblogs.com/linghaoxinpian/p/6915066.html 下载本章节代码 全局异常处理(Global Exception Handling) 使用Struts 2框架,您可以

struts2官方 中文教程 系列十一:使用XML进行表单验证

在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让您可以内置到Struts 2框架的验证器. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列十一:使用XML进行表单验证  即 http://www.cnblogs.com/linghaoxinpian/p/6938720.html 下载本章节代码 为了使用户能够编辑存储在Person对

struts2官方 中文教程 系列九:Debugging Struts

介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截器.本文还讨论了如何设置日志级别以查看更多或更少的日志消息. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列九:Debugging Struts 即 http://www.cnblogs.com/linghaoxinpian/p/6916619.html 下载本章节代码 Configu