2026/5/18 17:23:56
网站建设
项目流程
深圳做h5网站,公司图标设计大全免费 logo,做网站前台用什么问题,做网站还需要续费01 引言
我们做了Websocket的案例#xff0c;并没有像TCP协议一样处理拆包和粘包问题。Websocket基于Frame已经自动帮我们解决了拆包和粘包问题#xff0c;我们一起来看看是怎么解决的#xff01;
02 WebSocketFrame
WebSocketFrame是 Netty 中用于表示 WebSocket 协议数据帧…01 引言我们做了Websocket的案例并没有像TCP协议一样处理拆包和粘包问题。Websocket基于Frame已经自动帮我们解决了拆包和粘包问题我们一起来看看是怎么解决的02 WebSocketFrameWebSocketFrame是 Netty 中用于表示WebSocket协议数据帧的抽象基类。在WebSocket通信中所有数据文本、二进制、控制帧等都通过帧的形式进行传输。核心属性// 帧的最终标志位FINprivatefinalbooleanfinalFragment;// 保留位RSV1, RSV2, RSV3privatefinalintrsv;finalFragment参数是解决拆包粘包的关键标志位。03 处理流程3.1 调用链3.2 解码关键类io.netty.handler.codec.http.websocketx.WebSocket08FrameDecoderWebSocket协议定义了明确的帧格式每个帧都有明确的边界标识关键字段FIN位1位标识是否是消息的最后一个帧opcode4位操作码标识帧类型文本、二进制、控制帧等MASK位1位标识是否掩码Payload length7位负载长度自动扩展而WebSocket08FrameDecoder专门定义了解析帧的字段。其中关键的代码块bytebin.readByte();frameFinalFlag(b0x80)!0;(b 0x80) ! 0是用于检测某个字节 b 的最高位即第7位从右往左数是否为1。如果为1则返回true表示数据已经读完。这里正是解决拆包粘包的关键标志位。3.3 整个解析流程长度字段解析首先读取帧头部解析payload长度动态读取根据长度字段值读取相应字节数的数据帧完整性检查检查FIN位确定消息是否结束消息聚合对于分片消息FIN0自动缓存和重组04 小结WebSocket的拆包粘包问题已经妥善解决开发者只需要配置WebSocketServerProtocolHandlerNetty就会在合适的时机自动创建和配置WebSocket13FrameDecoder。为我们解决困扰无需手动处理。