首页 > 架构设计 > 软件结构 > 再聊t-io网络编程架构的基础知识:半包和粘包
顾名思义,就是收到了半个包,这个时候不足以组成一个应用层的包。就像你要对你喜欢的人说 “我喜欢你”,但是因为喝水咽着了,第一次只说了“我”字,第二次说了个“喜”字,第三个次了个“欢你”,那么就发生了半包问题,对方只有等待你说完这 4 个字后才知道你是想说“我喜欢你”!
用 http 协议为例,展示半包场景

粘包与半包相反,就是把多个想说的话,一口气说完了,对方反应不过来,得把你的话拆开一条一条地理解
用 http协议为例,展示粘包场景

说明:http协议是一来一回的,所以正常场景是不会有粘包的,但pipeline模式下是允许一方连续发多个请求的,所以会有粘包产生
为何坑人无数
初涉网络编程的同学,往往认为每次收到的数据刚好是一个完整的数据包
于是当网络不好,或是消息包过大时,半包的情况就发生了,而程序并没有考虑到半包的情况,结果就是解码失败,导致消息丢失
当通信的对方把多条业务数据包放在一个 TCP包中发过来时,粘包就产生了,而程序没有考虑到一次TCP收包会收到多个业务包,从而解析到第一个业务包后把后面的业务包丢弃了
百度一下半包粘包,一定会搜到很多记录,这也证明这俩货确实坑人无数,所以看完本节内容,你还会继续犯半包粘包的错吗?
具体请参考: https://www.tiocloud.com/doc/tio/84
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70006579/viewspace-2795474/ ,如需转载,请注明出处,否则将追究法律责任。