1. WebSocket 基础概念
什么是 WebSocket?
- WebSocket 是一种网络通信协议,提供了在单个 TCP 连接上进行全双工通信的方式。"全双工"意味着客户端和服务器可以同时发送和接收信息,这与传统的 HTTP 请求不同,后者是一种半双工通信方式(即一次只能进行一个请求或响应)。
WebSocket 与 HTTP 的区别
- 连接持续性:HTTP 协议是基于请求-响应模式的,通常在请求被服务端响应后连接就会关闭。而 WebSocket 在握手后就建立了一个持久的连接,直到客户端或服务器决定关闭这个连接。
- 实时性:WebSocket 支持实时数据传输,这对于需要快速响应的应用(如在线游戏、实时聊天等)来说非常重要。
- 头信息大小:WebSocket 的头信息比 HTTP 小,这意味着在数据传输时,WebSocket 的开销更小。
建立连接的过程
- 客户端请求:WebSocket 连接是通过 HTTP 请求“升级”来初始化的。客户端发送一个特殊的 HTTP 请求,包含
Upgrade: websocket和Connection: Upgrade头信息。 - 服务器响应:如果服务器支持 WebSocket,则会以一个状态码
101 Switching Protocols响应,表示服务器同意改变协议。 - 数据传输:一旦握手完成,数据就可以通过这个连接双向传输。
使用场景
- 实时聊天应用
- 在线游戏
- 实时数据更新(如股票报价)
- 协作应用(如实时文档编辑)
WebSocket URL
- WebSocket URL 以
ws://(非加密) 或wss://(加密) 开头,类似于 HTTP 的http://和 HTTPS 的https://。
2. 在 Spring Boot 中使用 WebSocket
步骤 1: 添加依赖项
首先,在你的 pom.xml 文件中添加 Spring Boot 对 WebSocket 的支持。这通常意味着添加 spring-boot-starter-websocket 依赖。
xmlCopy code<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!-- 其他依赖 -->
</dependencies>
步骤 2: 配置 WebSocket
在 Spring Boot 应用中创建一个配置类来启用和配置 WebSocket。
@Configuration
@EnableWebSocketMessageBroker // 启用 WebSocket 消息代理
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// 注册一个 WebSocket 端点,客户端将使用它连接到 WebSocket 服务器。
registry.addEndpoint("/ws").withSockJS();
// SockJS 用于兼容不支持 WebSocket 的浏览器
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
// 定义消息代理,用于将消息从一个客户端路由到另一个客户端
registry.setApplicationDestinationPrefixes("/app");
// 客户端将使用此前缀发送消息
registry.enableSimpleBroker("/topic");
// 定义了一个简单的消息代理,客户端可以订阅的前缀
}
}
这里使用了 STOMP(Simple Text Oriented Messaging Protocol)作为 WebSocket 的子协议。STOMP 提供了一个可互操作的线路格式,允许 STOMP 客户端与任何支持 STOMP 的消息代理进行交互。
步骤 3: 创建 WebSocket 控制器
接下来,创建一个控制器来处理发送到 WebSocket 的消息。
@Controller
public class WebSocketController {
@MessageMapping("/hello") // 定义消息的地址
@SendTo("/topic/greetings") // 定义客户端订阅的地址
public String greeting(String message) throws Exception {
// 当服务器接收到 "/app/hello" 的消息时,它会调用此方法
return "Hello, " + message + "!";
}
}
这个控制器将接收发送到 /app/hello 的消息,并将响应发送到 /topic/greetings。
步骤 4: 客户端连接
在客户端,你需要使用一个合适的库来建立 WebSocket 连接。如果你的客户端是一个网页,你可以使用 SockJS 和 STOMP 客户端库。
<!DOCTYPE html>
<html>
<head>
<title>

最低0.47元/天 解锁文章
956

被折叠的 条评论
为什么被折叠?



