netty 学习
来源:互联网 发布:python 列表转元组 编辑:程序博客网 时间:2024/06/05 04:08
1.handler处理顺序
- ch.pipeline().addLast(new OutboundHandler1());
- ch.pipeline().addLast(new OutboundHandler2());
- // 注册两个InboundHandler,执行顺序为注册顺序,所以应该是InboundHandler1 InboundHandler2
- ch.pipeline().addLast(new InboundHandler1());
- ch.pipeline().addLast(new InboundHandler2());
那么收到消息时,handler执行顺序是inboundhandler1->inboundhandler2
发送消息时, 执行顺序是outboundhandler2->outboundhandler1
在使用Handler的过程中,需要注意:
1、ChannelInboundHandler之间的传递,通过调用 ctx.fireChannelRead(msg) 实现;调用ctx.write(msg) 将传递到ChannelOutboundHandler。
2、ctx.write()方法执行后,需要调用flush()方法才能令它立即执行。
3、ChannelOutboundHandler 在注册的时候需要放在最后一个ChannelInboundHandler之前,否则将无法传递到ChannelOutboundHandler。
另外也可以使用
CombinedChannelDuplexHandler<ChannelInboundHandlerAdapter, ChannelOutboundHandlerAdapter> {
那么发送接收消息都会走这个handler
2.LengthBasedFrameEncoder属性字段含义
maxFrameLength:表示帧最大长度
lengthFieldOffset :帧长度字段的起始位,从哪个字节开始是长度字段
lengthFieldLength:长度字段占多少个字节
lengthAdjustment:调节值,读完长度字段之后,还会读长度值+lengthAdjustment个字节
initialBytesToStrip:读取跳过的字节数
如果0-4字节存储帧长度,长度值表示整个帧长度(包含长度字段),那么decoder lengthAdjustment需要设为-4
假设收到一个包,长度属性值位14,那么encoder在读完长度字段后,还会读取14-4=10个字节,那么就把整个帧读完了
读完之后再根据initialBytesToStrip值,决定返回的字节数
如果initialBytesToStrip设为0, 那么decoder返回的字节数为14,readableBytes为14,包含长度字段
如果initialBytesToStrip设为4,那么decoder返回的字节数为10,不包含长度字段,readableBytes为10
如果lengthAdjustment设为0,
那么encoder读完长度字段后,还要读取14+0=14个字节,但是buffer中没有这么多字节,
所以会继续等待收到另外一个包,才能继续处理,这样就错了
所以如果长度值不包含长度字段所占字节数,那么lengthAdjustment需要设为0
3.octet String的含义
octet现在就是字节的含义
字节串每个字节表示ascii值,例如字节串"0",那么这个字节十六进制表示为0x30
- Netty学习-05-Netty
- Netty----什么是Netty学习
- netty学习
- Netty学习
- Netty学习
- Netty学习
- Netty学习
- netty 学习
- netty学习
- Netty学习
- Netty学习
- Netty学习 netty nio编程
- 【Netty】netty学习笔记一
- Netty自学-Netty学习(一)
- Netty 学习(5) Netty Example--echo
- Netty 学习(8)Netty Example Telnet
- Netty学习之旅------Netty Channel 概述
- Netty学习(一)-为什么选择Netty
- 每天自动备份MySQL数据库的shell脚本
- C++拷贝构造函数详解
- java堆栈
- DDL,DML,DCL
- 自定义带进度条webView
- netty 学习
- [LeetCode] Word Ladder
- Caffe Tutorial in Brief
- CI3框架初识-控制其使用注意-Call to a member function model() on null in
- Python学习笔记(一)
- CMake与Make
- 关于子父类中调用顺序的小结
- MHA故障切换方案
- 在实际软件开发中运用到的工具