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

相关推荐
陈随易5 小时前
在 VSCode 里,把项目一键部署到服务器
前端·后端·程序员
鱼樱前端6 小时前
我用 Claude Code 后,编码效率翻 3 倍。但更值钱的是别的。
前端·后端·ai编程
犀利豆6 小时前
Claude code tools 研究系列-开篇(AskUserQuestion)
后端
颜酱9 小时前
06 | 把 meta_config 同步进 MySQL(生成阶段)
前端·人工智能·后端
IT_陈寒10 小时前
SpringBoot自动配置坑了我一周,原来问题这么蠢!
前端·人工智能·后端
iOS开发上架哦11 小时前
Android代码混淆与iOS加固技术详解
后端·ios
Alan_69112 小时前
商品详情优化三板斧-拆分-多级缓存-GC调参
后端·缓存
Conan在掘金12 小时前
ArkTS 进阶之道(3):为哈禁解构声明?类型一眼可见 vs 推断链断裂
后端
晚安code12 小时前
干掉成山的 if-else:工厂造、策略选,一文讲透两个模式的配合
后端·设计模式
feng尘12 小时前
深度解析布隆过滤器(Bloom Filter):原理、优缺点与 1000 万黑名单实战
后端·面试