Spring Boot整合WebSocket

目录

?引言

[1.WebSocket 基础知识](#1.WebSocket 基础知识)

[?1.1 什么是 WebSocket?](#?1.1 什么是 WebSocket?)

[?1.2 WebSocket 的应用场景](#?1.2 WebSocket 的应用场景)

[?2.Spring Boot WebSocket 整合步骤](#?2.Spring Boot WebSocket 整合步骤)

[2.1 创建 Spring Boot 项目](#2.1 创建 Spring Boot 项目)

[2.2 添加 Maven 依赖](#2.2 添加 Maven 依赖)

[2.3 配置 WebSocket](#2.3 配置 WebSocket)

[2.4 创建 WebSocket 控制器](#2.4 创建 WebSocket 控制器)

[2.5 创建前端页面](#2.5 创建前端页面)


引言

在现代 web 应用中,实时通信变得越来越重要。传统的 HTTP 请求-响应模型并不适合需要实时更新的场景,例如在线聊天、实时通知、在线游戏等。WebSocket 协议提供了一种在单个连接上进行双向通信的方式,能够有效地解决这一问题。Spring Boot 作为一个快速开发框架,提供了对 WebSocket 的良好支持,使得开发者能够快速构建基于 WebSocket 的应用。

本文将详细介绍如何在 Spring Boot 中整合 WebSocket,分为多个部分,包括 WebSocket 的基本概念、Spring Boot 的相关配置、实现步骤以及一些常见问题和最佳实践。

1.WebSocket 基础知识

1.1 什么是 WebSocket?

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时数据交换,而无需每次都重新建立连接。WebSocket 的核心特性包括:

双向通信:客户端和服务器都可以主动发送和接收消息。

低延迟:由于 WebSocket 连接是持久的,消息可以立即传递,而不需要重复的 HTTP 请求。

节省资源:通过减少 HTTP 请求的开销,WebSocket 可以节省带宽和服务器资源。

1.2 WebSocket 的应用场景

WebSocket 适用于多种实时交互的场景,包括但不限于:

实时聊天应用

在线游戏

实时数据监控

股票行情推送

实时通知

2.Spring Boot WebSocket 整合步骤

2.1 创建 Spring Boot 项目

首先,我们需要创建一个新的 Spring Boot 项目。可以使用 Spring Initializr(https://start.spring.io/)生成一个基础项目,选择以下依赖:

  • Spring Web

  • Spring WebSocket

  • Spring Boot DevTools(可选,用于开发时热重启)

2.2 添加 Maven 依赖

在 `pom.xml` 中添加 WebSocket 的相关依赖(如果使用 Spring Initializr 创建项目,这些依赖会自动添加):

xml

org.springframework.boot

spring-boot-starter-websocket

2.3 配置 WebSocket

在项目中创建一个配置类,配置 WebSocket 的端点和消息代理。

```java

package com.example.demo.config;

import org.springframework.context.annotation.Configuration;

import org.springframework.messaging.simp.config.MessageBrokerRegistry;

import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;

import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration

@EnableWebSocketMessageBroker

public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

@Override

public void registerStompEndpoints(StompEndpointRegistry registry) {

// 注册 STOMP 协议的 endpoint,并指定使用 SockJS 协议

registry.addEndpoint("/ws").withSockJS();

}

@Override

public void configureMessageBroker(MessageBrokerRegistry config) {

// 配置消息代理

config.enableSimpleBroker("/topic", "/queue");

config.setApplicationDestinationPrefixes("/app");

}

}

```

2.4 创建 WebSocket 控制器

接下来,我们需要创建一个控制器来处理 WebSocket 消息。

```java

package com.example.demo.controller;

import org.springframework.messaging.handler.annotation.MessageMapping;

import org.springframework.messaging.handler.annotation.SendTo;

import org.springframework.stereotype.Controller;

@Controller

public class WebSocketController {

@MessageMapping("/send")

@SendTo("/topic/messages")

public String sendMessage(String message) {

return message; // 返回接收到的消息

}

}

2.5 创建前端页面

在 `src/main/resources/templates` 目录下创建一个 `index.html` 文件,用于测试 WebSocket。

```html
WebSocket Demo

WebSocket Demo

Send

相关推荐
卷无止境2 分钟前
测试全绿,功能能跑,代码却烂到没法上线:AI编程助手留下的十个坑
后端·python
明月_清风23 分钟前
多模式字符串匹配:Trie 与 AC 自动机
后端·算法
小荷才露尖尖角,早有蜻蜓立上头24 分钟前
class java.util.LinkedHashMap cannot be cast to xxx
java·spring boot
嘻哈baby35 分钟前
不用 LangChain,从 0 写一个 Ollama 本地 RAG
后端
TickDB44 分钟前
Python 接入 A 股盘前集合竞价数据:AkShare 报错到 TickDB 实测的完整解法
python·websocket·行情数据 api
MZA6661 小时前
Spring Boot 实战:基于自定义注解 + AOP 实现 Kafka 消息无侵入异步上送
java·spring boot·kafka
幸运小圣1 小时前
SSE 与 WebSocket 新手入门:前端实时通信完全指南【JavaScript】
前端·javascript·websocket
考虑考虑1 小时前
Redis8.8新特性
运维·redis·后端
geovindu1 小时前
java:Observer Pattern
java·开发语言·后端·观察者模式·设计模式·行为模式
山甫aa2 小时前
【从零开始的 Web 后端学习】令牌技术一篇搞定(JWT 登录认证保姆级)
后端·学习·spring·web·jwt