# websocket **Repository Path**: Allen_D/websocket ## Basic Information - **Project Name**: websocket - **Description**: websocket demo - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-06-23 - **Last Updated**: 2025-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 1.1 WebSocket 与 Http对比 ![对比](https://s2.loli.net/2024/07/11/HXeO1tJ36rv7kWm.png) - `连接方式` - **HTTP:** HTTP 是基于请求-响应模式的协议。客户端发送请求,服务器响应请求。每次请求都需要建立新的连接,完成数据传输后连接断开。 - **WebSocket:** WebSocket 是一种全双工协议,建立连接后,客户端和服务器之间可以进行双向通信,无需每次都建立新的连接。 - `数据传输方式` - **HTTP:** HTTP 使用明文传输数据,数据以消息的形式进行传输。 - **WebSocket:** WebSocket 使用二进制帧传输数据,可以有效地减少数据传输量。 - `效率` - **HTTP:** HTTP 的效率受到连接建立和关闭的开销影响,尤其是在频繁请求的情况下。 - **WebSocket:** WebSocket 由于保持连接,可以避免每次请求的连接建立和关闭开销,效率更高。 - `实时性` - **HTTP:** HTTP 无法实现实时通信,因为每次请求都需要等待响应。 - **WebSocket:** WebSocket 可以实现实时双向通信,适合需要实时数据交互的应用场景。 ### 1.2 WebSocket 工作原理 - **握手阶段:** 客户端向服务器发起一个 WebSocket 握手请求,请求升级 HTTP 连接为 WebSocket 连接。握手请求包含一些特定的头部信息,例如 `Connection: Upgrade`, `Upgrade: websocket`, `Sec-WebSocket-Key` 等。 - **建立连接:** 服务器接收到握手请求后,会进行验证,如果验证成功,会发送一个 WebSocket 握手响应,表明连接成功建立。 - **数据传输:** 连接建立后,客户端和服务器就可以通过 WebSocket 进行双向的数据传输了。数据传输采用帧的形式,每个帧包含 opcode、掩码、数据长度、数据等信息。 - **关闭连接:** 当客户端或服务器一方需要关闭连接时,可以通过发送一个关闭帧来关闭连接。 ### 1.3 WebSocket 应用场景 - **实时聊天:** WebSocket 非常适合用来构建实时聊天应用,因为可以实时地将消息传递给所有参与者。 - **游戏开发:** 在多人在线游戏中,WebSocket 可以用来实时同步游戏状态、玩家位置、聊天信息等数据。 - **股票行情:** WebSocket 可以用来实时推送股票行情信息,让用户能够及时了解最新的市场动态。 - **数据监控:** WebSocket 可以用来实时监控数据,例如网站流量、服务器状态、传感器数据等。