为什么使用 LengthFieldPrepender/LengthFieldBasedFrameDecoder

Why use a LengthFieldPrepender/LengthFieldBasedFrameDecoder

我考虑了一段时间,为什么要在 TCP 连接中使用 LengthFieldPrepender and LengthFieldBasedFrameDecoder

我不明白为什么我唯一的想法是确保数据正确传输并检查长度,但如果我对 TCP 的理解是正确的,TCP 本身应该处理数据正确传输。

您说得对,TCP 协议应该处理数据是否正确传输。尽管在许多情况下,发送的数据量在接收时是未知的(即可变数量)。

为了解决这个问题,发送数据的长度被添加到数据包的头部。如果我们知道长度是固定大小 n,那么我们可以读取 n 字节,然后接下来的 length 字节保存数据。

TCP 是一种流协议。由应用程序来构建数据,即确定数据单元(数据包或消息)的开始位置和结束位置。可靠地实现这一点的两种基本方法是在消息的长度前加上一个定界符。有很多方法可以对前置长度进行编码,并且有很多种分隔符的可能性。 TCP协议保证通过单次写入发送的数据将通过单次读取接收,尽管短消息通常是这种情况。