news 2026/7/1 18:53:15

第一章Netty,bytebuffer黏包半包(核心点理解)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第一章Netty,bytebuffer黏包半包(核心点理解)

基于前文对 ByteBuffer 核心机制(position/limit)、状态控制(flip/compact)及网络协议处理(Scattering/Gathering)的讨论,‌粘包‌和‌半包‌是 TCP 流式协议在应用层必须解决的核心问题。ByteBuffer 通过其指针管理和内存操作特性,提供了高效的解决方案。

一、现象定义与成因

粘包 (Sticky Packet)‌:
现象‌:发送方连续发送两个小包(如 “A” 和 “B”),接收方一次性读到了 “AB”。
成因‌:TCP 为了优化性能,使用 ‌Nagle 算法‌将多个小数据包合并发送;或接收方应用层读取不及时,内核缓冲区累积了多个包。
半包 (Half Packet)‌:
现象‌:发送方发送一个大包(如 “HelloWorld”),接收方第一次只读到了 “Hel”,剩下的 “loWorld” 在下次读取中获得。
成因‌:接收方缓冲区大小不足、MTU(最大传输单元)限制导致 IP 分片、或网络拥塞。

二、ByteBuffer 解决策略

核心思路:‌在应用层建立消息边界‌。常用方法有“固定长度”、“分隔符”和“长度字段”。其中‌长度字段法‌最通用且高效。

1. 核心逻辑:累积与解析
利用 ByteBuffer 的 compact() 方法保留未处理完的数据,并结合 mark/reset 或绝对读写预读长度。

状态流转图‌:
接收数据 -> 存入 Buffer -> 检查是否有完整 Header -> 检查 Body 是否齐全 -> 提取业务数据 -> Compact 剩余数据

2. 代码实现示例(长度字段法)

importjava.nio.ByteBuffer;publicclassTcpUnpackingDemo{privateByteBufferbuffer=ByteBuffer.allocate(1024);publicvoidprocessInput(ByteBufferincomingData){// 1. 将新数据追加到累积缓冲区// 注意:实际场
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 18:53:15

Ray Adapter调度策略详解:PlacementGroup与NodeAffinity实战

Ray Adapter调度策略详解:PlacementGroup与NodeAffinity实战 【免费下载链接】ray-adapter Compatible with the core interfaces of the open-source software Ray, it facilitates the seamless migration of workloads running on Ray (such as vllm/verl, etc.)…

作者头像 李华
网站建设 2026/7/1 18:53:15

OmniStream状态管理革命:OmniStateStore如何降低RocksDB访问频次

OmniStream状态管理革命:OmniStateStore如何降低RocksDB访问频次 【免费下载链接】OmniStream OmniStream operator acceleration is implemented using native code (C/C) to optimize Flink SQL and DataStream operators. 项目地址: https://gitcode.com/opene…

作者头像 李华
网站建设 2026/7/1 18:52:49

UBS-IO API完全参考:从创建Cache实例到性能优化的10个关键接口

UBS-IO API完全参考:从创建Cache实例到性能优化的10个关键接口 【免费下载链接】ubs-io Ubs-io provides high-level I/O services for application-affinity global data read/write caching systems based on UB superpods. 项目地址: https://gitcode.com/open…

作者头像 李华
网站建设 2026/6/27 21:00:58

awesome-cli-apps:近两万 Star 的命令行应用合集

文章目录awesome-cli-apps:近两万 Star 的命令行应用合集awesome-cli-apps:近两万 Star 的命令行应用合集 很多人用命令行只停留在 cd、ls、grep 这几个基础操作上。其实命令行能做的事情远比想象中多,从听音乐、看视频到管理项目、处理数据&…

作者头像 李华
网站建设 2026/6/29 10:33:42

HBuliderX运行uniapp到MuMu模拟器

运行到安卓模拟器 1、下载MuMu模拟器 https://mumu.163.com/ 傻瓜式安装即可。 2、进入开发者模式 设置——关于手机——版本号,多次连续点击版本号即可进入开发者模式。 3、adb路径 D:\HBuildderX\HBuilderX\plugins\launcher-tools\tools\adbs 此路径就是HB…

作者头像 李华