当前位置: 首页 > news >正文

深圳网站建设工作关键词分为哪三类

深圳网站建设工作,关键词分为哪三类,丹东网站建设平台,web前端开发培训机构Netty笔记1:线程模型 Netty笔记2:零拷贝 Netty笔记3:NIO编程 Netty笔记4:Epoll Netty笔记5:Netty开发实例 Netty笔记6:Netty组件 Netty笔记7:ChannelPromise通知处理 Netty笔记8:ByteBuf使用介绍 Netty笔记9:粘包半包 Netty笔记10:LengthFieldBasedFrameDec…

Netty笔记1:线程模型

Netty笔记2:零拷贝

Netty笔记3:NIO编程

Netty笔记4:Epoll

Netty笔记5:Netty开发实例

Netty笔记6:Netty组件

Netty笔记7:ChannelPromise通知处理

Netty笔记8:ByteBuf使用介绍

Netty笔记9:粘包半包

Netty笔记10:LengthFieldBasedFrameDecoder

Netty笔记11:编解码器

Netty笔记12:模拟Web服务器

Netty笔记13:序列化

文章目录

  • 前言
  • 什么是`LengthFieldBasedFrameDecoder`
  • 理论
  • 实践验证
    • 粘包
    • 半包
  • 补充

前言

本部只是LengthFieldBasedFrameDecoder的理论总结,和理论验证。

什么是LengthFieldBasedFrameDecoder

LengthFieldBasedFrameDecoder处理基于长度字段的协议。它能够根据数据包中的长度字段来解析数据流,并将数据流分割成独立的帧;

因其能对数据包边界的识别,而应用于粘包和半包的处理;

理论

应用层协议都是基于TCP/IP进行开发的,传输数据时就会有协议特征,就是数据头,它不作为我们真正的有效数据;

那么在解码时,需要考虑,数据包长度,数据头长度,和数据体长度;

public LengthFieldBasedFrameDecoder(// 允许的最大数据长度(以字节为单位),就是你的一个数据最大多大,超过报异常int maxFrameLength,// 长度字段的开始索引下标int lengthFieldOffset, // 长度字段占用的字节数int lengthFieldLength,// 长度字段之后,开始读取的索引下标偏移量int lengthAdjustment, // 接收到的发送数据包,丢弃多少位int initialBytesToStrip) {

lengthFieldOffset、lengthFieldLength:这两个字段很好理解,就是解码器,要确定读取多少字节长度的数据,就必须先读取我们指定的长度字段,那么这两个字段就可以确定从哪一个索引下标开始,读取多少字节,以此来获取数据长度(底层读取方式:ByteBuf.getUnsignedInt(lengthFieldOffset));

lengthAdjustment:就是待读取数据的开始索引下标与长度字段结束索引的差值(带读取数据的开始索引 - 长度字段结束索引),或者是以长度字段结束索引为坐标0点,待读取数据的开始索引到0点的距离(左负右正);

那么,怎么判断待读取的开始位置?

从数据结构右边的尾部,向左移动长度字段值的位置就是开始索引位置,如长度字段(length)值是33,那么,从右边尾部向左移动33个索引位置就是开始位置,也或是看长度字段包含了哪些部分(长度字段包发的部分应是连续的数据块);

假设协议如下:

| header | length  | header | 数据体1		  4         8        x长度如上:448x(未知)

画出坐标如下:

image-20240706220345137

取值规则如下:

length值:数据体长度

image-20240706221403046

取值:

lengthFieldOffset=4 -> 长度字段开始索引下标
lengthFieldLength=4 -> 长度字段长度
lengthAdjustment=8 -> 长度字段与待读取数据的开始索引差值

length值:包含8字节的header,数据体

image-20240706221432597

lengthFieldOffset=4 -> 长度字段开始索引下标
lengthFieldLength=4 -> 长度字段长度
lengthAdjustment=0 -> 长度字段与待读取数据的开始索引差值

length值:包含本身长度,以及8字节的header,数据体

image-20240706221600356

lengthFieldOffset=4 -> 长度字段开始索引下标
lengthFieldLength=4 -> 长度字段长度
lengthAdjustment=-4 -> 长度字段与待读取数据的开始索引差值

length值:包含1字节的header,本身长度,以及8字节的header

image-20240706221652625

lengthFieldOffset=4 -> 长度字段开始索引下标
lengthFieldLength=4 -> 长度字段长度
lengthAdjustment=-5 -> 长度字段与待读取数据的开始索引差值

感觉画图不够清晰,下面是文字版的:

| header | length  | header | 数据体1		  4         8        x长度如上:4,4,8,x(未知)length值:数据体长度
| header | length  | header | 数据体1		  4         8        x^        ^|        |0        从这开始读
则:
lengthFieldOffset=4  -> 长度字段开始索引下标
lengthFieldLength=4  -> 长度字段长度
lengthAdjustment=8   -> 长度字段与待读取数据的开始索引差值length值:包含8字节的header,数据体| header | length  | header | 数据体1		  4         8        x^        |        0 从这开始读lengthFieldOffset=4  -> 长度字段开始索引下标
lengthFieldLength=4  -> 长度字段长度
lengthAdjustment=0   -> 长度字段与待读取数据的开始索引差值length值:包含本身长度,以及8字节的header,数据体| header | length  | header | 数据体1		  4         8        x^		   ^        |		   |        从这开始读	0 lengthFieldOffset=4  -> 长度字段开始索引下标
lengthFieldLength=4  -> 长度字段长度
lengthAdjustment=-4  -> 长度字段与待读取数据的开始索引差值length值:包含1字节的header,本身长度,以及8字节的header| header | length  | header | 数据体1		  4         8        x
^   	 		   ^        
|    	 		   |        
从这开始读    		0 lengthFieldOffset=4  -> 长度字段开始索引下标
lengthFieldLength=4  -> 长度字段长度
lengthAdjustment=-5  -> 长度字段与待读取数据的开始索引差值

实践验证

LengthFieldBasedFrameDecoder要做数据流解析验证用的,所以放在第一个,待它根据我们指定的规则解析数据流后,将独立的帧(数据头、长度字段、数据体等)作为一个完整的数据包传给下一个handler

粘包

步骤:

  1. 创建一个MessageToByteEncoder,消息写入时,将消息组装各部分帧:长度字段,数据头,和数据体;

  2. 客户端发送多次数据,或者一次将多个消息数据合并为一个ByteBuf发送(模拟粘包);

  3. 服务端第一个添加LengthFieldBasedFrameDecoder,第二个添加我们自定义的handler用来获取数据和判断读取次数;

  4. 出站handler,连续写入两个数据包,但只发送一次

    public class MBHandler extends MessageToByteEncoder<UserInfo> {private static final long serializable = 123456789;private static final int type = 1;@Overrideprotected void encode(ChannelHandlerContext ctx,
http://www.hkea.cn/news/44304/

相关文章:

  • 中小学网站建设探讨东莞seo整站优化火速
  • php是网站开发的语言吗企业网站的作用
  • 网站站外优化怎么做企业推广app
  • 拉趣网站是谁做的威海网站制作
  • 做宣传海报的网站百度导航2023年最新版
  • 湖南做网站 磐石网络windows优化大师官方免费
  • 制作网站的最新软件如何优化关键词的方法
  • 东莞工作招聘网最新招聘搜索 引擎优化
  • 宁波俄语网站建设免费发广告的平台有哪些
  • 郑州外贸网站建设及维护营销软件商城
  • 泉州百度关键词排名广州网站营销优化qq
  • 怎么做wep网站营销推广活动方案
  • 展示型网站php官方app下载安装
  • 嘉祥网站建设广东省自然资源厅
  • 忘记网站后台密码网站排名软件推荐
  • 怎么查公司网站有没有被收录火爆产品的推广文案
  • 绵阳网站建设 经开区网络教学平台
  • wordpress阅读量没改7个湖北seo网站推广策略
  • 网站建设成功案例方案找培训机构的平台
  • 园林绿化网站建设百度关键词优化公司
  • 个人如何建设网站网络营销方式有哪些分类
  • 北京做百度网站建设电商平台如何推广运营
  • 电脑个人网站怎么做网络销售新手入门
  • 海口网站建设 小黄网络手机百度搜索
  • 太原百度网站建设网站应该如何进行优化
  • 烟台市做网站uc浏览网页版进入
  • 工程信息网站哪家做的较好提高工作效率心得体会
  • 建站平台入口徐州网站设计
  • 出口手工艺品网站建设方案站长统计app下载
  • 提升学历骗局武汉搜索引擎排名优化