本文主要讲解 Netty 中如何处理粘包与拆包问题,包括产生原因、模拟示例以及常见解决方式。阅读本篇前,建议先阅读前几篇基础内容。
一、什么是粘包与拆包?
在 TCP 协议中,数据以“字节流”的形式传输,没有明确的消息边界。因此,当客户端发送多个数据包到服务器时,可能出现如下两种现象:
-
粘包:多个数据包粘在一起,服务端一次性读取到多个请求的数据;
-
拆包:一个数据包被拆成了多次读取,服务端每次只读取到部分数据。
举例说明
假设客户端连续发送两个消息:
HelloServer
HelloNetty
服务端可能一次性读取到:
HelloServerHelloNetty(粘包)
或者分别读取到:
HelloSer(拆包)
verHelloNetty
二、粘包与拆包的常见原因
-
客户端发送数据太快;
-
数据长度超过了 TCP 缓冲区;
-
TCP 底层优化机制,如 Nagle 算法;
-
没有制定明确的消息边界(分隔符、定长、协议头等)。
三、Netty 如何解决粘包与拆包
Netty 提供了多种解码器帮助我们自动处理粘包/拆包问题:
1、使用 LineBasedFrameDecoder
按行分隔,一般用于文本协议:

最低0.47元/天 解锁文章
913

被折叠的 条评论
为什么被折叠?



