在 Spring Boot 中使用 WebSocket 实现实时通信是一个强大的功能,它允许服务器与客户端之间建立持久性的双向连接,实现实时消息推送、通知和数据更新等功能。WebSocket 可以在 Web 应用中实现聊天应用、实时数据展示、实时监控等场景。下面将详细介绍在 Spring Boot 中如何集成和使用 WebSocket。

1. 添加 WebSocket 依赖

首先,在 pom.xml 文件中添加 Spring WebSocket 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

2. 创建 WebSocket 配置类

创建一个配置类来配置 WebSocket。

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebSocketHandler(), "/ws")
                .setAllowedOrigins("*");
    }
}

在上面的配置中,使用 @EnableWebSocket 注解启用 WebSocket 功能,通过 registerWebSocketHandlers 方法注册一个自定义的 WebSocket 处理器,并指定处理器的路径为 /ws

3. 创建 WebSocket 处理器

创建一个 WebSocket 处理器来处理 WebSocket 连接和消息。

@Component
public class MyWebSocketHandler extends TextWebSocketHandler {

    private final Set<WebSocketSession> sessions = new HashSet<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        sessions.add(session);
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String payload = message.getPayload();
        // 处理收到的消息
        // 可以将消息推送给其他连接的客户端
        for (WebSocketSession s : sessions) {
            s.sendMessage(new TextMessage("Received: " + payload));
        }
    }
}

在上面的处理器中,我们重写了 afterConnectionEstablished 方法来处理 WebSocket 连接建立事件,以及重写了 handleTextMessage 方法来处理收到的文本消息。

4. 使用 WebSocket

在客户端,您可以使用 JavaScript 或其他前端技术来连接和使用 WebSocket。以下是一个简单的 JavaScript 示例:

const socket = new WebSocket('ws://localhost:8080/ws');

socket.onopen = (event) => {
    console.log('WebSocket connection opened:', event);
};

socket.onmessage = (event) => {
    console.log('Received message:', event.data);
};

socket.onclose = (event) => {
    console.log('WebSocket connection closed:', event);
};

5. 运行应用程序

运行 Spring Boot 应用程序,您就可以在客户端使用 WebSocket 来实现实时通信了。

通过以上步骤,您可以在 Spring Boot 中集成和使用 WebSocket,实现实时通信功能。WebSocket 允许服务器和客户端之间实现实时的双向通信,适用于聊天、通知、实时数据更新等场景,为 Web 应用带来更好的用户体验。