概述
更多信息请参看HP-Socket网络通信框架开发指南v5.2-20180201(https://download.csdn.net/download/cair2/10636514)
由于TCP是流式套接字,所以socket收到的数据而言,可能不是一个完整的包或者粘包了。此时需要应用层来进行拆包组包了。例如客户端连续发送了三个数据包大小分别是:300,500,100。但是接收端接受到的数据可能是200,400,100,200。所以此时我们处理接收到的数据就要进行组包和拆包了。
由于200不足一个数据包,所以需要组合下一个数据包400。此时数据大小为600,但是客户端第一个发送的数据包是300,所以此时需要将600拆分为300+300。此时就可以得到第一个数据包300,剩余数据300,但是第二个数据包是500。数据不够所以需要组合下一个数据100总共数据400,依然不够一个包,继续组包剩余的200,此时接受数据600,足够一个数据包500,所以将600拆解为500+100。得到第二个数据包500,剩余数据100,正好和第三个数据包100匹配。此时数据包解析完毕。基本逻辑
while(true)
{
data_size = recv_data();
if(data_size < 数据包长度)
continue;//继续接受数据
///循环拆包,当不够一个包的时候继续接受数据等待一个完整的包
while(true)
{
//足够包长度,拆包
data_size -= 数据包长度;
//更新数据缓冲区,处理包
hanle_pack(pack);
if(data_size < 数据包长度)
break;
}
}
所以综上所述模型:
PUSH:收到数据立马触发OnReceive,由开发人员自己实现拆包和缓冲区的管理逻辑。
PULL:收到数据立马触发OnReceive,但需要开发人员维护数据包的长度(数据缓冲区管理HP内部做了),当拼接一个完整的Pack之后,Fetch获取完整的数据包就OK了。
PACK:收到数据并且拼成一个完整的Pack之后触发OnReceive,OnReceive的数据就是一个完整的包。开发人员不必关系拼包的过程,
最后
以上就是安详玫瑰为你收集整理的HPSocket 三种模型PACK,PUSH,PULL的全部内容,希望文章能够帮你解决HPSocket 三种模型PACK,PUSH,PULL所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复