乐趣区

关于java:再聊tio网络编程架构的基础知识半包和粘包

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

用 http 协定为例,展现半包场景

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

用 http 协定为例,展现粘包场景

阐明:http 协定是一来一回的,所以失常场景是不会有粘包的,但 pipeline 模式下是容许一方间断发多个申请的,所以会有粘包产生
为何坑人有数
初涉网络编程的同学,往往认为每次收到的数据刚好是一个残缺的数据包

于是当网络不好,或是音讯包过大时,半包的状况就产生了,而程序并没有思考到半包的状况,后果就是解码失败,导致音讯失落

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

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

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

退出移动版