ITPub博客

首页 > 架构设计 > 软件结构 > 再聊t-io网络编程架构的基础知识:半包和粘包

再聊t-io网络编程架构的基础知识:半包和粘包

原创 软件结构 作者:manong 时间:2021-10-12 10:26:16 0 删除 编辑

半包

顾名思义,就是收到了半个包,这个时候不足以组成一个应用层的包。就像你要对你喜欢的人说 “我喜欢你”,但是因为喝水咽着了,第一次只说了“我”字,第二次说了个“喜”字,第三个次了个“欢你”,那么就发生了半包问题,对方只有等待你说完这 4 个字后才知道你是想说“我喜欢你”!

 

用 http 协议为例,展示半包场景

粘包

粘包与半包相反,就是把多个想说的话,一口气说完了,对方反应不过来,得把你的话拆开一条一条地理解

 

用 http协议为例,展示粘包场景

说明:http协议是一来一回的,所以正常场景是不会有粘包的,但pipeline模式下是允许一方连续发多个请求的,所以会有粘包产生

为何坑人无数

初涉网络编程的同学,往往认为每次收到的数据刚好是一个完整的数据包

 

于是当网络不好,或是消息包过大时,半包的情况就发生了,而程序并没有考虑到半包的情况,结果就是解码失败,导致消息丢失

 

当通信的对方把多条业务数据包放在一个 TCP包中发过来时,粘包就产生了,而程序没有考虑到一次TCP收包会收到多个业务包,从而解析到第一个业务包后把后面的业务包丢弃了

 

百度一下半包粘包,一定会搜到很多记录,这也证明这俩货确实坑人无数,所以看完本节内容,你还会继续犯半包粘包的错吗?

 

具体请参考: https://www.tiocloud.com/doc/tio/84


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70006579/viewspace-2795474/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-09-14

  • 博文量
    15
  • 访问量
    8032