在 SpringBoot中的WebSocket使用介绍

在 Spring Boot 中,WebSocket 是一种非常有用的通信协议。WebSocket 可以使客户端和服务器之间实现双向通信,而不是传统的单向 HTTP 请求和响应。本文将介绍在 Spring Boot 中如何使用 WebSocket。

  1. 添加依赖
    在 pom.xml 文件中添加以下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  1. 创建 WebSocket 配置类
    创建一个 WebSocketConfig 类,在类上加上 @Configuration 和 @EnableWebSocket 注解。在类中添加一个方法,返回一个 WebSocketHandler 对象。
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(myHandler(), "/myHandler").setAllowedOrigins("*");}@Beanpublic WebSocketHandler myHandler() {return new MyHandler();}
}

其中,/myHandler 是 WebSocket 的端点,MyHandler 是具体的处理类,setAllowedOrigins(“*”) 表示允许跨域请求。

  1. 创建 WebSocket 处理类
    创建一个 MyHandler 类实现 WebSocketHandler 接口,并重写其中的方法。具体实现可以根据业务需求来进行定制。
public class MyHandler implements WebSocketHandler {@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {// 连接建立后的操作}@Overridepublic void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {// 处理收到的消息}@Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {// 处理传输错误}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {// 连接关闭后的操作}@Overridepublic boolean supportsPartialMessages() {return false;}
}
  1. 发送 WebSocket 消息
    在前端页面中,可以使用 JavaScript 的 WebSocket 对象实现与服务器的通信。例如:
var socket = new WebSocket("ws://localhost:8080/myHandler");socket.onopen = function(event) {// 连接建立后的操作
};socket.onmessage = function(event) {// 处理收到的消息
};socket.onclose = function(event) {// 连接关闭后的操作
};socket.send("hello world");
  1. 测试 WebSocket
    运行 Spring Boot 应用程序,并通过浏览器访问前端页面。在控制台中可以看到 WebSocket 连接的日志信息。可以使用 JavaScript 发送消息,也可以在 MyHandler 中主动发送消息。
session.sendMessage(new TextMessage("hello world"));

总结:
Spring Boot 提供了非常方便的操作 WebSocket 的方式,使得我们可以快速地实现双向通信功能。在实际开发中,可以根据具体业务需求来定制 WebSocket 的处理类。

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

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

相关文章

【GitHub项目推荐--国外大神复刻暗黑2】【转载】

《暗黑破坏神2》&#xff0c;由顶尖游戏公司暴雪研发&#xff0c;2000 年上市&#xff0c;其资料片 2001 年上市&#xff0c;2D 画面。相信这款游戏已经成为很多人的回忆了&#xff0c;不知道当时是不是也和我一样沉迷于收集套装呢&#xff1f; 这款游戏的剧情设计、画面感都令…

vue3+threejs可视化项目——搭建vue3+ts+antd路由布局(第一步)

文章目录 ⭐前言&#x1f496;vue3系列相关文章 ⭐搭建vue3项目过程&#x1f496; 初始化项目&#x1f496; 添加antd和router依赖&#x1f496; vite配置项映射目录和代理&#x1f496; antd国际化&#x1f496; layout布局封装&#x1f496; vite读取modules目录文件作为路由…

迁移npm包到nexus

背景&#xff1a;外包项目完工后&#xff0c;需要搭建客户开发环境&#xff0c;因此需要将对应的npm开发包迁移到客户nexus 步骤: 1.先从前端工程中的yarn.lock文件中获取组件列表 2.使用python脚本下载组件到本地 3.使用pythons脚本上传npm包到nexus仓库 第2不脚本如下&#…

网络爬虫丨基于scrapy+mysql爬取博客信息并保存到数据库中

文章目录 写在前面实验描述实验框架实验需求 实验内容1.安装依赖库2.创建Scrapy项目3.配置系统设置4.配置管道文件5.连接数据库6.分析要爬取的内容7.编写爬虫文件 运行结果写在后面 写在前面 本期内容&#xff1a;基于scrapymysql爬取博客信息并保存到数据库中 实验需求 ana…

第二十八周:文献阅读笔记(弱监督学习)+ pytorch学习

第二十八周&#xff1a;文献阅读笔记&#xff08;弱监督学习&#xff09; 摘要Abstract1. 弱监督学习1.1. 文献摘要1.2. 引言1.3. 不完全监督1.3.1. 主动学习与半监督学习1.3.2. 通过人工干预1.3.3. 无需人工干预 1.4. 不确切的监督1.5. 不准确的监督1.6. 弱监督学习的创新点 2…

【读书笔记】《重构_改善既有代码的设计》重构的方法论

重构的方法论 标题&#xff1a;【读书笔记】【读书笔记】《重构_改善既有代码的设计》重构的方法论 时间&#xff1a;2024.01.14 作者&#xff1a;耿鬼不会笑 重构是什么? 什么是重构&#xff1a; “重构”这个词既可以用作名词也可以用作动词。 重构&#xff08;名词&…

HandlerInterceptor拦截器 postHandle执行addHeader无效,postHandle执行setStatus无效的解决方案

问题描述 想在postHandle方法里执行addHeader方法来补充一些Header信息&#xff08;如分页信息&#xff09;&#xff0c;但是最后执行却未如期显示 拦截器源码 import com.zhangziwa.practisesvr.utils.response.ResponseContext; import jakarta.servlet.http.HttpServletR…

动态内存管理4大函数的进阶

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

用C语言实现哈希表HashMap

代码仓库地址 1. 功能说明 自定义初始容量和负载因子&#xff1b;当键值对的个数与容量比值超过负载因子时&#xff0c;自动扩容&#xff1b;借鉴Java8的HashMap部分扩容逻辑&#xff0c;定义了单独的桶结构体用于记录hash值&#xff0c;以及2倍扩容&#xff0c;减少了hash运算…

JDK17

JDK 17是Java开发工具包&#xff08;Java Development Kit&#xff09;的一个版本。JDK是用于开发和运行Java应用程序的软件包&#xff0c;它包含了编译器、调试器、运行时环境和其他一些实用工具。JDK 17是Java的最新版本&#xff0c;它提供了许多新的功能、增强和改进。 使用…

Python二级:二叉树问题求解

一、题源 在Python二级考试中前10道基础题是必考题&#xff0c;虽然没有什么卵用&#xff0c;但是你得分不达标&#xff0c;还不让你过&#xff0c;没有办法只好硬着头皮去刷题了。这10道题中有一个二叉树题比较难&#xff0c;现摘录如下&#xff0c;同时给出gpt-4的解答&…

在 Centos 7.9 中,安装与配置 Docker 20.10.18

1. 检测内核版本 在使用Docker之前&#xff0c;首先需要确保系统内核版本达到3.10以上。可以通过以下命令检查&#xff1a; uname -r2. 升级内核及软件包 为了确保系统的稳定性和安全性&#xff0c;建议在安装Docker之前先升级系统内核和相关软件包&#xff1a; yum -y upd…

zustand状态管理工具(react)

分别创建文件continue.js、shoes.js 1、continue.js import create from zustand import { persist } from zustand/middlewareexport default create(persist((set) > ({counter: 12,incrementer: () > set((state) > ({ counter: state.counter 1 })),decrementer…

ruoyi后台管理系统部署-3-安装redis

centos7安装redis 1. yum 安装 查看是否安装了redis yum installed list | grep redis ps -ef | grep redis安装epel 仓库&#xff08;仓库是软件包下载的&#xff0c;类似maven&#xff0c;nuget&#xff09; yum install epel-release搜索 redis 包 yum search redis安装…

逸学Docker【java工程师基础】1.认识docker并且安装

场景问题 在实际开发过程中我们有这样的场景问题 在开发阶段的环境配置到了其他人项目人员那里就不能运行了&#xff0c;尽管配置规格相同&#xff0c;但是在较多的不同的环境情况下还是可能会有错误。 开发&#xff1a;程序员&#xff1a;你那边可以运行了吗 测试&#xf…

爬虫补环境jsdom、proxy、Selenium案例:某条

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、简介 爬虫逆向补环境的目的是为了模拟正常用户的行为&#xff0c;使爬虫看起来更像是一个真实的用户在浏览网站。这样可以…

前端基础知识整理汇总(下)

react 生命周期 React v16.0前的生命周期 初始化(initialization)阶段 此阶段只有一个生命周期方法&#xff1a;constructor。 constructor() 用来做一些组件的初始化工作&#xff0c;如定义this.state的初始内容。如果不初始化 state 或不进行方法绑定&#xff0c;则不需…

编程艺术之Unix哲学

Unix 哲学不算是一种正规设计方法&#xff0c;它并不打算从计算机科学的理论高度来产生理论上完美的软件。那些毫无动力、松松垮垮而且薪水微薄的程序员们&#xff0c;能在短短期限内&#xff0c;如神灵附体般开发出稳定而新颖的软件——这只不过是经理人永远的梦呓罢了。 1 Un…

Leetcode 3008. Find Beautiful Indices in the Given Array II

Leetcode 3008. Find Beautiful Indices in the Given Array II 1. 解题思路2. 代码实现 题目链接&#xff1a;3008. Find Beautiful Indices in the Given Array II 1. 解题思路 这一题其实算是套路题了&#xff0c;知道的话就挺快的&#xff0c;不知道的话就会很难了…… …

isis实验

根据要求制作大概&#xff1a; 使用isis配置路由器&#xff1a; 配置好物理接口地址后配置isis 为实现r1访问r5的环回走r6,需要在r6上制作路由泄露&#xff1a; 在r5上产生r1的路由明细&#xff1a; 全网可达&#xff1a;