WebSocket 详解 WebSocket 详解一、什么是 WebSocket?核心特性二、WebSocket 的工作原理2.1 握手过程2.2 数据帧格式三、WebSocket 与 HTTP 的对比四、WebSocket 的应用场景4.1 实时聊天应用4.2 在线游戏4.3 金融交易4.4 物联网(IoT)4.5 协作工具五、WebSocket 的优缺点优点缺点六、WebSocket 安全6.1 WSS(WebSocket Secure)6.2 安全最佳实践七、WebSocket 在 Java 中的使用7.1 使用 Spring WebSocket7.2 使用 Netty WebSocket八、WebSocket 常见问题8.1 连接断开8.2 消息丢失8.3 性能问题九、总结一、什么是 WebSocket?WebSocket是一种在单个 TCP 连接上进行全双工通信的通信协议。它允许服务器和客户端之间建立持久连接,实现双向实时数据传输。核心特性全双工通信:客户端和服务器可以同时发送和接收数据持久连接:一旦建立连接,就保持打开状态,无需反复握手低延迟:数据可以即时推送,无需轮询轻量级:协议开销小,适合实时应用基于 TCP:建立在 TCP 协议之上,保证可靠传输二、WebSocket 的工作原理2.1 握手过程WebSocket 连接建立需要经历一个HTTP 握手过程:客户端 服务器 | | |--- HTTP Upgrade Request -----| | (请求升级为 WebSocket 协议) | | | |-- HTTP 101 Switching Protocols| | (确认协议升级) | | | |====== WebSocket 连接建立 =====| | | |--- 双向实时数据传输 -------|握手请求示例:GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13 Origin: http://example.com握手响应示例:HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=2.2 数据帧格式WebSocket 数据以**帧(Frame)**为单位传输,每帧包含:+---+---+---+---+---+---+---+---+ | FIN | RSV1 | RSV2 | RSV3 | +---+---+---+---+---+---+---+---+ | Opcode | Mask | Payload Length | +---+---+---+---+---+---+---+---+ | Extended Payload Length (if needed) | +---+---+---+---+---+---+---+---+ | Masking Key (if needed) | +---+---+---+---+---+---+---+---+ | Payload Data | +---+---+---+---+---+---+---+---+Opcode 类型:0x0:Continuation frame(延续帧)0x1:Text frame(文本帧)0x2:Binary frame(二进制帧)0x8:Close frame(关闭帧)0x9:Ping frame(心跳帧)0xA:Pong frame(心跳响应帧)三、WebSocket 与 HTTP 的对比特性HTTPWebSocket