websocket粘包处理
websocket 底层使用的tcp 协议。 当一次发送数据过长时,tcp 会把数据封成多个包发送;同样当数据过短时, 会把数据合并成一个包发送,这种现象就是粘包。粘包的情况也有可能是接收端造成的。[参考] ( http://m.blog.csdn.net/duotemplar/article/details/73193038 ). tcp协议相关的知识百度之。 粘包出现必然对应拆包处理。处理方案:
eg: 现在通过websocket传输: A 数据, B数据 (只讨论粘包的情况)
i 接收(应用层)AB数据
根据数据的帧信息,先解析A数据,然后解析B数据
ii 接收AB1、B2(B数据分成B1,B2)
解析A数据;根据B1的帧信息(包含数据是否完整、数据长度、数据类型等)可以判断不是完整数据,缓存B1数据;
继续接收数据B2,然后解析B1B2数据(不包含B1、B2的帧信息);
iii 接收A1、A2B (A数据分成A1,A2)
根据A1的帧信息可以判断不是完整数据,缓存A1数据;继续接收A2B数据,解析A1A2数据;然后解析B数据
iv 接收A1、A2B1、B2(A数据分成A1,A2 B数据分B1,B2)
缓存A1;解析A1A2;缓存B1;解析B1B2。
赞 (0)