美文网首页
Netty篇:拆包与粘包

Netty篇:拆包与粘包

作者: 东方明珠脚下的流浪猫 | 来源:发表于2020-07-16 18:44 被阅读0次

    TCP粘包/拆包

    问题描述

           TCP是个“流”协议,所谓流,就是没有界限的一串数据。一个业务上完整的包可能会被TCP拆分成过个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。

    解决策略

    (1)消息定长,每个报文大小固定,不够则空位补齐

    (2)在包尾增加回车换行符进行分割

    (3)将消息分为消息头和消息体,消息头中包含表示消息总长度(或者消息体长度)的字段,通常设计思路为消息头的第一个字段使用int32来表示消息的总长度;

    (4)更复杂的应用层协议

    netty解决方案

    Netty提供了4种解码器来解决,分别如下:

           1.固定长度的拆包器 FixedLengthFrameDecoder,每个应用层数据包的都拆分成都是固定长度的大小

           2.行拆包器 LineBasedFrameDecoder,每个应用层数据包,都以换行符作为分隔符,进行分割拆分

           3.分隔符拆包器 DelimiterBasedFrameDecoder,每个应用层数据包,都通过自定义的分隔符,进行分割拆分


           4.基于数据包长度的拆包器 LengthFieldBasedFrameDecoder,将应用层数据包的长度,作为接收端应用层数据包的拆分依据。按照应用层数据包的大小,拆包。这个拆包器,有一个要求,就是应用层协议中包含数据包的长度

    参考:

    《Netty权威指南》

    相关文章

      网友评论

          本文标题:Netty篇:拆包与粘包

          本文链接:https://www.haomeiwen.com/subject/pfsmhktx.html