Spring Boot中整合WebSocket

2023-10-27

要在Spring Boot中整合WebSocket,需要进行以下步骤:

1.创建一个Spring Boot项目: 

  • 使用Spring Initializr创建一个新的Spring Boot项目。
  • 选择适当的Spring Boot版本和依赖项。
  • 添加WebSocket依赖项,如spring-boot-starter-websocket

 2.创建WebSocket配置类:

  • 创建一个Java类,用于配置WebSocket。
  • 使用@Configuration注解标记该类为配置类。
  • 使用@EnableWebSocket注解启用WebSocket支持。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

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

在上述示例中,我们创建了一个WebSocketConfig类,并实现了WebSocketConfigurer接口。在registerWebSocketHandlers方法中,我们注册了一个自定义的WebSocket处理程序MyWebSocketHandler,并指定了WebSocket的访问路径为/websocket。 

3.创建WebSocket处理程序: 

  • 创建一个Java类,用于处理WebSocket连接和消息。
  • 继承TextWebSocketHandler类,并重写相应的方法。
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        // 处理收到的消息
        String receivedMessage = message.getPayload();
        // 发送消息给客户端
        session.sendMessage(new TextMessage("Received: " + receivedMessage));
    }
}

在上述示例中,我们创建了一个MyWebSocketHandler类,并继承了TextWebSocketHandler类。在handleTextMessage方法中,我们处理收到的消息,并发送一个回复消息给客户端。

4.创建WebSocket客户端: 

  • 在前端创建一个WebSocket客户端,用于与后端建立WebSocket连接并发送/接收消息。
const socket = new WebSocket('ws://localhost:8080/websocket');

socket.onopen = function() {
    console.log('WebSocket connection established.');
    socket.send('Hello, WebSocket!');
};

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

在上述示例中,我们创建了一个WebSocket对象,并指定了WebSocket服务器的URL。在连接建立后,我们发送一条消息给服务器,并在收到消息时进行处理。 

5.运行应用程序: 

  1. 启动Spring Boot应用程序。
  2. 打开浏览器,访问前端页面,查看控制台输出。

通过以上步骤,我们成功地在Spring Boot中整合了WebSocket,并实现了基本的消息收发功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot中整合WebSocket 的相关文章

  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且

随机推荐

  • Let’s Make C++ Great Again——multiset与unordered_set

    文章目录 multiset 头文件 定义和插入元素 访问元素 遍历元素 删除元素 以下是一些常用的函数和用法 size empty 自定义排序方式 删除所有相同的元素 multiset和set有什么区别 元素唯一性 插入和删除 查找 uno
  • JVM垃圾回收与性能调优总结

    JVM垃圾回收与性能调优总结 JVM调优的几种策略 一 JVM内存模型及垃圾收集算法 1 根据Java虚拟机规范 JVM将内存划分为 New 年轻代 Tenured 年老代 永久代 Perm 其中New和Tenured属于堆内存 堆内存会从
  • 免费虚拟服务器注册,如何注册免费虚拟主机空间

    如何注册免费 目前能提供免费虚拟主机空间的服务商 非常少 即使有 也是各种限制 这里仅推荐几款比较熟知的品牌 OpenShift OpenShift空间是Red Hat的平台即服务的 但也存在着 PHP程序不兼容 国内访问速度慢 访问出现莫
  • 如何使用overleaf&LaTeX

    Introduction What is LaTeX LaTeX是一种基于 的排版系统 由美国计算机学家莱斯利 兰伯特 Leslie Lamport 在20世纪80年代初期开发 利用这种格式 即使使用者没有排版和程序设计的知识也可以充分发挥
  • Python: list列表的11个内置方法

    前言 在实际开发中 经常需要将一组 不只一个 数据存储起来 以便后边的代码使用 在VBA中有使用数组 可以把多个数据存储 到一起 通过数组下标可以访问数组中的每个元素 Python 中没有数组 但是加入了更加强大的列表 list 下面就对列
  • 从输入URL到浏览器显示页面到底经历了什么?

    文章目录 从输入URL到浏览器显示页面到底经历了什么 DNS解析 1 DNS解析过程 2 DNS优化 建立TCP连接 1 什么是TCP 2 TCP的连接建立 三次握手 3 为什么是三次握手 发送HTTP请求 1 请求行 2 HTTP缓存优化
  • Yii Framework 开发教程(29) Zii组件-Menu 示例

    介绍完Yii数据库接口外 从本篇开始介绍Zii组件 包括列表视图ListView 表格视图GridView 此外还包括一些基于JQuery的UI组件 如AutoComplete DataPicker Button Drag 和 Drop等
  • 用Java生成N个不重复的随机数,3种实例

    1 Random类和Set集合来完成 Java实现生成n个不重复的随机数可以使用Java中的Random类和Set集合来完成 具体代码如下 import java util HashSet import java util Random i
  • el-table 中嵌入el-input 输入框无法输入问题(已解决)

    在使用elment ui中的el table 中嵌入el input 会出现 input 无法输入的情况 最后找到了问题的根源 是有时候获取到了数据 但是视图并没有更新 修改前代码
  • STM32f103系列 USART2 USART3 串口2和串口3通信

    最近在做一个工程要用到多个串口同时通讯的 就参考了正点原子的串口通讯例程 发现例程是USART1 串口1的 后面我想改成USART2 串口2的 上网找了资料 要不是不靠谱 要不就是要积分下载 所以后面自己写了一个可用程序来和大家分享 废话不
  • 期货反向跟单犯法吗?

    本篇文章给大家为分析一下关于 期货反向跟单犯法吗 这个疑问 对于想从事或正在运作跟单交易的朋友们来说有必要看一下 做反单跟单不同于做一个黑平台 黑平台的利润是来源于客户的亏损 而做反单的利润来源是市场 和杀羊具有本质区别 不存在什么违法行为
  • 【Educoder作业】C++ 面向对象 - 类的继承与派生

    Educoder作业 C 面向对象 类的继承与派生 关于继承 更多的是关注它的意义 在代码量很少的时候用处不大 大不了再写一个 但是当完成一些工作量比较大的工程时 继承就会避免我们重复的写很多东西 T1 公有继承 学生信息类 关注一下如何继
  • SpringBoot中使用Log4j2

    一 简介 slf4j是日志接口 logback和log4j2是其实现 log4j2的并发效率优于logback 二 SpringBoot中使用log4j2 由于SpringBoot中默认使用logback作为其日志框架 因此如果需要替换为l
  • VS报错runtime check failure #2的解决办法

    第一类 如果后续报错变量为指针类型 检查数组下标访问是否正确 有可能是越界访问 第二类 如果不是指针变量 可以将该局部变量改为全局变量
  • static_cast、dynamic_cast、const_cast和reinterpret_cast总结

    前言 这篇文章总结的是C 中的类型转换 这些小的知识点 有的时候 自己不是很注意 但是在实际开发中确实经常使用的 俗话说的好 不懂自己写的代码的程序员 不是好的程序员 如果一个程序员对于自己写的代码都不懂 只是知道一昧的的去使用 终有一天
  • 【读点论文】Image Style Transfer Using Convolutional Neural Networks(将卷积特征图提取语义信息,融合内容和风格的做法)

    Image Style Transfer Using Convolutional Neural Networks 以不同风格呈现图像的语义内容是一项困难的图像处理任务 可以说 以前的方法的一个主要限制因素是缺乏明确表示语义信息的图像表示 从
  • java 文字转语音

    使用 jacob project 插件 注意 jacob不支持linux jacob是 JAVA COM Bridge 的缩写 是一个中间件 能够提供自动化访问MS系统下COM组件和 Win32 libraries 的功能 并且jacob只
  • Jsp+Servlet+JavaBean到EJB,再到Spring,最后到SpringBoot

    一 知史可以明鉴 我们学习技术的时代赶上了最好的时代 跳过了很多前人经常踩的坑 前人在踩坑的过程中总结了很多经验和教训 而新时代的我们只是继承了前人的经验和教训 而忽略了这些采坑的过程 以至于我们面对很多新技术都不知道他是什么 他为什么存在
  • Unity项目较大刷新及编译卡顿解决方法

    开发中当Unity项目比较大的时候 每次Unity窗口获取焦点时刷新需要3 5秒 非常麻烦 常见有几种方法来缓解这个问题 关闭unity自动刷新Edit gt Preferences gt General gt Auto Refresh 改
  • Spring Boot中整合WebSocket

    要在Spring Boot中整合WebSocket 需要进行以下步骤 1 创建一个Spring Boot项目 使用Spring Initializr创建一个新的Spring Boot项目 选择适当的Spring Boot版本和依赖项 添加W