websocket是否需要处理粘包半包问题分析

结论:

​ 不需要。

背景:

​ 公司通信涉及到websocket相关,我们都知道websocket是基于tcp的,而tcp是面向字节流的,是需要处理粘包半包问题的。那么websocket是否需要处理半包粘包问题呢?就需要来分析下。

分析:

websocket协议帧分析

​ websocket中是基于frame来传递数据的,帧结构定义如下:
在这里插入图片描述

​ 看第一个bit位置FIN位,表示当前是否有后续帧,如果为0表示还有后续帧,如果为1则表示当前是最后一帧。那么其实只要分析我们所用的通信库对这个FIN位的处理,就可以看出是否需要处理粘包问题。

以asio库分析是否需要处理粘包

​ 以asio库为例。其中frame_header结构表示了websocket的frameheader,其中fin映射到了FIN位置

在这里插入图片描述

在内部维护了一个flag,rd_done用来表示是否读完一包数据,而在这包数据读完时,才会触发数据接收完成,故在应用层,就不需要在做半包粘包的处理了。

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老黄叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值