netty 学习 (2)Handler的执行顺序
2015-07-30 03:33
246 查看
摘要 Handler在netty中,无疑占据着非常重要的地位。Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的解码编码、拦截指定的报文、统一对日志错误进行处理、统一对请求进行计数、控制Handler执行与否。一句话,没有它做不到的只有你想不到的。
参考自:http://blog.csdn.net/u013252773/article/details/21195593
Handler在netty中,无疑占据着非常重要的地位。Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的解码编码、拦截指定的报文、统一对日志错误进行处理、统一对请求进行计数、控制Handler执行与否。一句话,没有它做不到的只有你想不到的。
Netty中的所有handler都实现自ChannelHandler接口。按照输出输出来分,分为ChannelInboundHandler、ChannelOutboundHandler两大类。ChannelInboundHandler对从客户端发往服务器的报文进行处理,一般用来执行解码、读取客户端数据、进行业务处理等;ChannelOutboundHandler对从服务器发往客户端的报文进行处理,一般用来进行编码、发送报文到客户端。
Netty中,可以注册多个handler。ChannelInboundHandler按照注册的先后顺序执行;ChannelOutboundHandler按照注册的先后顺序逆序执行,如下图所示,按照注册的先后顺序对Handler进行排序,request进入Netty后的执行顺序为:
下面例子涉及的类包括:
一、HelloServer:
?
二、InboundHandler1:
?
三、InboundHandler2:
?
四、OutboundHandler1 :
?
五、OutboundHandler2:
?
下面是客户端
六、HelloClient:
?
七、HelloClientIntHandler:
?
八、总结:
在使用Handler的过程中,需要注意:
1、ChannelInboundHandler之间的传递,通过调用 ctx.fireChannelRead(msg) 实现;调用ctx.write(msg) 将传递到ChannelOutboundHandler。
2、ctx.write()方法执行后,需要调用flush()方法才能令它立即执行。
3、ChannelOutboundHandler 在注册的时候需要放在最后一个ChannelInboundHandler之前,否则将无法传递到ChannelOutboundHandler。
4、Handler的消费处理放在最后一个处理。
参考自:http://blog.csdn.net/u013252773/article/details/21195593
Handler在netty中,无疑占据着非常重要的地位。Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的解码编码、拦截指定的报文、统一对日志错误进行处理、统一对请求进行计数、控制Handler执行与否。一句话,没有它做不到的只有你想不到的。
Netty中的所有handler都实现自ChannelHandler接口。按照输出输出来分,分为ChannelInboundHandler、ChannelOutboundHandler两大类。ChannelInboundHandler对从客户端发往服务器的报文进行处理,一般用来执行解码、读取客户端数据、进行业务处理等;ChannelOutboundHandler对从服务器发往客户端的报文进行处理,一般用来进行编码、发送报文到客户端。
Netty中,可以注册多个handler。ChannelInboundHandler按照注册的先后顺序执行;ChannelOutboundHandler按照注册的先后顺序逆序执行,如下图所示,按照注册的先后顺序对Handler进行排序,request进入Netty后的执行顺序为:
下面例子涉及的类包括:
一、HelloServer:
?
?
?
?
?
六、HelloClient:
?
?
在使用Handler的过程中,需要注意:
1、ChannelInboundHandler之间的传递,通过调用 ctx.fireChannelRead(msg) 实现;调用ctx.write(msg) 将传递到ChannelOutboundHandler。
2、ctx.write()方法执行后,需要调用flush()方法才能令它立即执行。
3、ChannelOutboundHandler 在注册的时候需要放在最后一个ChannelInboundHandler之前,否则将无法传递到ChannelOutboundHandler。
4、Handler的消费处理放在最后一个处理。
相关文章推荐
- JAVA多媒体编程入门(图像部分)
- Java GUI图形界面开发工具
- delete
- JAVA多媒体编程入门(图像部分)
- Java GUI图形界面开发工具
- delete
- 面向对象特点以及java的表现形式
- netty 学习 (1)
- 更改CentOS7的yum更新源
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十章 对象初始化
- 五个抄底摸高的交易系统和源代码
- 国外五大股票交易系统及其源码
- 五个抄底摸高的交易系统和源代码
- 国外五大股票交易系统及其源码
- 反射(类!我叫你,你敢答应吗)
- Baidusubmit——百度WordPress结构化数据插件有毒~(附插件代码分析与修正办法)
- B - Lunch-Gym 100637B-找规律过的
- 海龟交易系统源码
- 海龟交易系统源码
- F - The Pool for Lucky Ones -暴力