美文网首页
netty中的拆包与粘包(一)

netty中的拆包与粘包(一)

作者: 梁佳凝 | 来源:发表于2020-02-12 10:25 被阅读0次

    什么是TCP拆包和粘包

    使用TCP协议在传输数据的时候,如果数据块比较大,就会考虑将其切分。把一个大的数据包进行切割成一个个小的数据包发送。这时候就会遇到拆包和粘包的问题。

    比如说在这里客户端发送了两个数据包D1和D2到服务端,在传输的时候就可能会遇到下列问题:

    TCP

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

    (1)消息长度固定:累计读取到固定长度为LENGTH之后就认为读取到了一个完整的消息。然后将计数器复位,重新开始读下一个数据报文。

    (2)回车换行符作为消息结束符:在文本协议中应用比较广泛。

    (3)将特殊的分隔符作为消息的结束标志,回车换行符就是一种特殊的结束分隔符。

    (4)通过在消息头中定义长度字段来标示消息的总长度。

    netty主要解决方法

    (1)通过FixedLengthFrameDecoder 定长解码器来解决定长消息的黏包问题;

    (2)通过LineBasedFrameDecoder和StringDecoder来解决以回车换行符作为消息结束符的TCP黏包的问题;

    (3)通过DelimiterBasedFrameDecoder 特殊分隔符解码器来解决以特殊符号作为消息结束符的TCP黏包问题;

    (4)最后一种,也是本文的重点,通过LengthFieldBasedFrameDecoder自定义长度解码器解决TCP黏包问题

        在后面一篇描述

    相关文章

      网友评论

          本文标题:netty中的拆包与粘包(一)

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