网络传输层的粘包/拆包-组包/分包
【摘要】 总之是一个意思,就是对应用层要发送的数据的,可能的拆分发送、或合并发送。这是传输层及以下层负责的事情,应用层并不知道。传输层及以下层也不理解应用层的业务数据。看一个图:这个问题呢,是通过上层的应用设计来解决的。比如约定消息定长、约定包尾分隔符(如FTP协议用回车换行符)消息头中包含消息总长度,等等。一个最简单的例子,换行分割的数据怎么处理?LineBasedFrameDecoder:遍历By...
总之是一个意思,就是对应用层要发送的数据的,可能的拆分发送、或合并发送。
这是传输层及以下层负责的事情,应用层并不知道。传输层及以下层也不理解应用层的业务数据。
看一个图:
这个问题呢,是通过上层的应用设计来解决的。
比如约定消息定长、约定包尾分隔符(如FTP协议用回车换行符)
消息头中包含消息总长度,等等。
一个最简单的例子,换行分割的数据怎么处理?
LineBasedFrameDecoder:遍历ByteBuf里的可读字节,看是否有回车、或回车换行,有,则以此为结束位置。从可读索引到这里,就组成了一行。
如果读到配置的最大长度,还没有发现换行,就抛出异常,忽略已读到的码流。
StringDecoder:将接受到的对象转换为字符串。以什么编码呢?
除了这简单的,netty还支持很多种TCP粘包/拆包的解码器。注意,是解码器。没有编码器提供。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)