package
0.0.0-20220129082330-373cf4e477cb
Repository: https://github.com/liusiyuan-git/go-learning.git
Documentation: pkg.go.dev
# README
1、总结几种 socket 粘包的解包方式: fix length/delimiter based/length field based frame decoder。尝试举例其应用
什么是粘包? 比如,发送方发送两条信息:①abc ②def 接收方接收到的是 abcdef
为什么会发生粘包? 因为TCP处理的是底层的数据流,数据流本身没有任何开始和结束的边界
举例: 发送方:应用程序发送的数据小于超过缓冲区空间,等到同多个数据包填满缓冲区再进行发送的情况,这样数据看起来像黏在了一起,产生粘包 接收方:应用程序没有持续读取缓冲区的数据流,导致缓冲区放了多个数据包数据,再进行读取,产生粘包
接包方式: fix length:每次发送固定长度的数据,并且不超过缓冲区,接受方每次按固定长度区接受数据 delimiter based:发送方,在数据包添加特殊的分隔符,用来标记数据包边界 length field based:发送方,在消息数据包头添加包长度信息
2、实现一个从 socket connection 中解码出 goim 协议的解码器