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

Netty 编解码技术

文章首发地址

Netty 分隔符和定长解码器的应用

TCP以流的方式进行数据传输,上层的应用协议为了对消息进行区分,往往采用如下4种方式。

  1. 消息长度固定,累计读取到长度总和为定长LEN的报文后,就认为读取到了一个完整的消息;将计数器置位,重新开始读取下一个数据报;
  2. 将回车换行符作为消息结束符,例如FTP协议,这种方式在文本协议中应用比较广泛;
  3. 将特殊的分隔符作为消息的结束标志,回车换行符就是一种特殊的结束分隔符;
  4. 通过在消息头中定义长度字段来标识消息的总长度。

DelimiterBasedFrameDecoder(基于分隔符)

通过对DelimiterBasedFrameDecoder的使用,我们可以自动完成以分隔符作为码流结束标识的消息的解码。

开发过程中DelimiterBasedFrameDecoder会自动解码,channelRead (ChannelHandlerContext ctx , Object msg),msg自动过滤掉分隔符直接是数据体

FixedLengthFrameDecoder(固定长度解码器)

FixedLengthFrameDecoder是固定长度解码器,它能够按照指定的长度对消息进行自动解码

总结

  • DelimiterBasedFrameDecoder用于对使用分隔符结尾的消息进行自动解码,FixedLengthFrameDecoder用于对固定长度的消息进行自动解码。有了上述两种解码器,再结合其他的解码器,如字符串解码器等,可以轻松地完成对很多消息的自动解码,而且不再需要考虑TCP粘包/拆包导致的读半包问题,极大地提升了开发效率。
  • 应用DelimiterBasedFrameDecoder和FixedLengthFrameDecoder进行开发非常简单,在绝大数情况下,只要将DelimiterBasedFrameDecoder或FixedLengthFrameDecoder添加到对应ChannelPipeline的起始位即可。

http://www.kler.cn/a/37646.html

相关文章:

  • mysql查询优化
  • ipv6 问题排查
  • 【项目部署】原生部署SpringBoot项目
  • 到天宫做客
  • 节点互信or秘钥登录
  • 电动汽车路由问题的基准测试
  • Jina AI 受邀出席 WAIC 2023「科技无障碍」论坛,与行业专家共话 AI 普惠未来
  • 机器学习随机森林笔记
  • Java 中的反射是什么?如何使用它?
  • 【玩转Linux操作】Linux进程(进程基本介绍,父子进程,终止进程,进程树)
  • linux进程间通信的本质
  • 【Linux系统】Linux多线程详解
  • java导出pdf(纯代码实现)
  • 容器化部署 rocketmq-dashboard
  • 山东农信:一云多芯助力金融活水普惠齐鲁大地
  • MySQL - OJ 练习(23道)
  • 按键精灵、auto.js等一些移动端脚本 如何连接云服务器的数据库, 进行读写操作
  • spring复习:(18)给bean的属性赋值
  • 再学JavaScript
  • 接收请求数据和数据的回显