Java WebSocket 核心原理与实战应用
一、从 HTTP 局限引出 WebSocket
在互联网应用中,HTTP 协议采用请求 - 响应模式,客户端发起请求,服务器返回响应。这种模式在大多数场景下表现良好,但在需要实时通信的场景(如在线聊天、股票行情)中显得力不从心。
为了实现实时通信,传统方式常使用轮询(Polling)。短轮询频繁发送请求,浪费资源且实时性差;长轮询虽有所改进,但服务器资源消耗大。例如在股票交易高峰期,大量轮询请求会让服务器不堪重负,导致数据延迟。
为了解决这些问题,WebSocket 协议应运而生。它实现了客户端和服务器之间的双向实时通信,让数据传输更加高效流畅。
二、WebSocket 核心机制
(一)定义与特性
WebSocket 是 HTML5 提供的一种在单个 TCP 连接上进行全双工通信的协议。全双工意味着客户端和服务器可以同时双向传输数据。相比 HTTP 的单向通信,WebSocket 允许服务端主动向客户端推送数据,真正实现了实时通信。
(二)与 HTTP 的区别
- 连接模式:HTTP 通常是短连接,每次请求后关闭;WebSocket 建立持久连接,除非主动关闭。
- 通信方向:HTTP 主要由客户端发起请求;WebSocket 支持双向主动发送。
- 消息推送:HTTP 需借助轮询实现推送;WebSocket 天生支持服务端推送。
(三)工作原理
- 握手阶段:WebSocket 连接通过 HTTP 请求建立。客户端发送带有
Upgrade: websocket头部的请求,服务器返回101 Switching Protocols响应确认升级。 - 建立持久连接:握手成功后,协议切换至 WebSocket,连接保持打开状态。
- 双向通信:双方通过发送和接收数据帧(Frame)进行交互。数据帧包含控制信息和负载数据。

三、Java 中使用 WebSocket
(一)环境搭建
以 Spring Boot 项目为例,引入 WebSocket 依赖。
Maven (pom.xml):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
Gradle (build.gradle):
implementation 'org.springframework.boot:spring-boot-starter-websocket'


