Spring Boot整合WebSocket

news2025/2/28 6:21:24

目录

?引言

1.WebSocket 基础知识

?1.1 什么是 WebSocket?

?1.2 WebSocket 的应用场景

?2.Spring Boot WebSocket 整合步骤

2.1 创建 Spring Boot 项目

2.2 添加 Maven 依赖

2.3 配置 WebSocket

2.4 创建 WebSocket 控制器

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2307245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pycharm使用matplotlib出现的问题(1、不能弹出图表 2、图表标题中文不显示)

Pycharm使用matplotlib出现的问题 问题1:Pycharm调试时出现:AttributeError: module backend_interagg has no attribute FigureCanvas. Did you mean: FigureCanvasAgg? 排查原因:可能是由于matplotlib后端设置不正确或与运行环境不兼容引…

【PromptCoder】使用 package.json 生成 cursorrules

【PromptCoder】使用 package.json 生成 cursorrules 在当今快节奏的开发世界中,效率和准确性至关重要。开发者们不断寻找能够优化工作流程、帮助他们更快编写高质量代码的工具。Cursor 作为一款 AI 驱动的代码编辑器,正在彻底改变我们的编程方式。但如…

给博客添加基于百度地图的足迹页面

使用百度地图 api 做的足迹页面一段时间了,经过一番改造,目前已基本能够满足自己需求。 一、添加百度地图 添加百度地图基本思路就是6点: 申请百度AK适当位置添加百度地图容器引入百度地图 api创建地图实例设置地图中心点初始化地图 这里…

【构建工具】Gradle Kotlin DSL中的大小写陷阱:BuildConfigField

在Android开发当中,BuildConfig是一个非常有用的功能,它允许我们在构建过程中定义常量,并在运行时使用它们。But!!当我们从传统的Groovy DSL迁移到Kotlin DSL时或者被Android Studio坑的时候,有一些细微的差…

4个小时开发DeepSeek+baiduNaotu一键生成思维导图

一、引言 最近发现AI生成思维导图的解决方案普遍存在两个断层:用户需手动复制模型输出的JSON数据到脑图软件,且缺乏实时可视化反馈。基于日常使用的BaiduNaotu框架(其轻量级架构与简洁的UI设计已满足基础需求),我决定…

(21)从strerror到strtok:解码C语言字符函数的“生存指南2”

❤个人主页:折枝寄北的博客 ❤专栏位置:简单入手C语言专栏 目录 前言1. 错误信息报告1.1 strerror 2. 字符操作2.1 字符分类函数2.2 字符转换函数 3. 内存操作函数3.1 memcpy3.2 memmove3.2memset3.3 memcmp 感谢您的阅读 前言 当你写下strcpy(dest, s…

SpringBoot集成easy-captcha图片验证码框架

SpringBoot集成easy-captcha图片验证码框架 此项目已经很久未维护,如有更好的选择,建议使用更好的选择!!! 一、引言 验证码(CAPTCHA)是现代应用中防止机器人攻击、保护接口安全的核心手段之一。然而,从零开发验证码…

货车一键启动无钥匙进入手机远程启动的正确使用方法

一、移动管家货车无钥匙进入系统的使用方法 基本原理:无钥匙进入系统通常采用RFID无线射频技术和车辆身份识别码识别系统。车钥匙需要随身携带,当车钥匙靠近货车时,它会自动与货车的解码器匹配。开门操作:当靠近货车后&#xff0…

【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.2.2倒排索引原理与分词器(Analyzer)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 1.2.2倒排索引原理与分词器(Analyzer)1. 倒排索引:搜索引擎的基石1.1 正排索引 vs 倒排索引示例数据对比: 1.2 倒排索引核心结…

和鲸科技携手四川气象,以 AI 的力量赋能四川气象一体化平台建设

气象领域与农业、能源、交通、环境科学等国计民生关键领域紧密相连,发挥着不可替代的重要作用。人工智能技术的迅猛发展,为气象领域突破困境带来了新的契机。AI 技术能够深度挖掘气象大数据中蕴含的复杂信息,助力人类更精准地把握自然规律&am…

linux下java Files.copy 提示文件名过长

linux下java Files.copy 提示文件名过长问题排查 系统运行时执行文件拷贝的功能的时候出现了 文件名称过长的报错提示 查询过资料后整理出了每个操作系统支持最大的文件名称长度 每个操作系统现在的文件长度不一样 Linux的 /usr/include/linux/limits.h 中做出了说明 这些限制…

Metal学习笔记八:纹理

到目前为止,您已经学习了如何使用片段函数和着色器为模型添加颜色和细节。另一种选择是使用图像纹理,您将在本章中学习如何作。更具体地说,您将了解: • UV 坐标:如何展开网格,以便可以对其应用纹理。 • 纹…

Idea 和 Pycharm 快捷键

一、快捷键 二、Pycharm 中怎么切换分支 参考如下 如果在界面右下角 没有看到当前所在的分支,如 “Git:master” 3. 有了 4.

fody引用c++的dll合并后提示找不到

fody引用c的dll合并后提示找不到 解决方案&#xff1a; 在 FodyWeavers.xml 文件中添加配置 CreateTemporaryAssemblies‘true’ 官方文档&#xff1a;https://github.com/Fody/Costura <Weavers xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:noN…

初识flutter1

为什么使用flutter, 说直白一点,就是移动UI框架, 个人认为优势是: 1.一套代码adnroid 和ios 可以使用, 代码好维护 2.原生用户界面 3.开源、免费的 开发工具&#xff1a; 1.下载 java 包, 根据自己的电脑配置选择 官网下载: https://www.oracle.com/java/technologies/download…

12字符函数

一、函数strchr与strrchr 注意&#xff1a; 这两个函数的功能&#xff0c;都是在指定的字符串 s 中&#xff0c;试图找到字符 c。strchr() 从左往右找&#xff0c;strrchr() 从右往左找。字符串结束标记 ‘\0’ 被认为是字符串的一部分。 图解&#xff1a; 示例代码&#xff…

QT6开发高性能企业视频会议-8 使用VSCode+Copilot AI开发

Github Copilot是Github和OpenAI推出的AI编程辅助工具&#xff0c;之前版本的Github Copilot只有简单的代码自动补全&#xff0c;根据注释生成一些代码等辅助功能。 近期Copilot有了一次大的升级&#xff0c;加入了Agent模式&#xff0c;可以实现自然语言对话讨论和最重要的&a…

矩阵的奇异值(SVD)分解和线性变换

矩阵的奇异值&#xff08;SVD&#xff09;分解和线性变换 SVD定义 奇异值分解&#xff08;Singular Value Decomposition&#xff0c;简称 SVD&#xff09;是一种重要的线性代数工具&#xff0c;能够将任意矩阵 ( A ∈ R m n \mathbf{A} \in \mathbb{R}^{m \times n} A∈Rmn…

数据库的sql语句

本篇文章主要用来收集项目开发中&#xff0c;遇到的各种sql语句的编写。 1、根据user表的role_id字段&#xff0c;查询role表。 sql语句&#xff1a;使用JOIN连接两个表 SELECT u.*,r.rolename FROM user u JOIN role r ON u.role_id r.id WHERE u.id 1; 查询结果&#xff1a…

Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调

Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调 环境准备创建Python微调环境准备数据集准备模型文件 模型微调模型预测原始模型预测微调模型预测 使用unsloth&#xff0c;可以方便地对大模型进行微调。以微调DeepSeek-R1-Distill-Llama-8B为…