当前位置: 首页 > news >正文

SpringBoot整合WebSocket【代码】

系列文章目录

一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】
二、SpringBoot连接Redis与Redisson【代码】
三、SpringBoot整合WebSocket【代码】
四、SpringBoot整合ElasticEearch【代码示例】


文章目录

  • 系列文章目录
  • 代码下载地址
  • 一、效果演示
  • 二、引入依赖
  • 三、WebSocketConfig
  • 四、SessionWrap
  • 五、WebSocketServer


代码下载地址

SpringBoot整合WebSocket【代码】


一、效果演示

测试链接
在这里插入图片描述

在这里插入图片描述

二、引入依赖

<!--    websocket    -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>2.1.1.RELEASE</version>
</dependency>

三、WebSocketConfig

@Configuration
public class WebSocketConfig {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}
}

四、SessionWrap

SessionWrap 可根据具体需求自定义

@Data
public class SessionWrap {private String from;	// 连接Idprivate String type;	// 来凝结类型private Session session;private Date lastTime;
}

五、WebSocketServer

@Slf4j
@Component
@ServerEndpoint(value = "/api/websocket/{from}/{type}")
public class WebSocketServer {@Autowiredprivate MessageService messageService;public static WebSocketServer webSocketServer;// 所有的连接会话private static CopyOnWriteArraySet<SessionWrap> sessionList = new CopyOnWriteArraySet<>();private String from;private String type;@PostConstructpublic void init() {webSocketServer = this;webSocketServer.messageService = this.messageService;}/*** @author Lee* @date 2023/7/18 13:57* @description 创建连接*/@OnOpenpublic void onOpen(Session session, @PathParam(value = "from") String from, @PathParam(value = "type") String type) {this.from = from;this.type = type;try {// 遍历list,如果有会话,更新,如果没有,创建一个新的for (SessionWrap item : sessionList) {if (item.getFrom().equals(from) && item.getType().equals(type)) {item.setSession(session);item.setLastTime(new Date());log.info("【websocket消息】更新连接,总数为:" + sessionList.size());return;}}SessionWrap sessionWrap = new SessionWrap();sessionWrap.setFrom(from);sessionWrap.setType(type);sessionWrap.setSession(session);sessionWrap.setLastTime(new Date());sessionList.add(sessionWrap);log.info("【websocket消息】有新的连接,总数为:" + sessionList.size());} catch (Exception e) {log.info("【websocket消息】连接失败!错误信息:" + e.getMessage());}}/*** @author Lee* @date 2023/7/18 13:57* @description 关闭连接*/@OnClosepublic void onClose() {try {sessionList.removeIf(item -> item.getFrom().equals(from) && item.getType().equals(type));log.info("【websocket消息】连接断开,总数为:" + sessionList.size());} catch (Exception e) {log.info("【websocket消息】连接断开失败!错误信息:" + e.getMessage());}}/*** @author Lee* @date 2023/7/18 14:04* @description 发送消息*/@OnMessagepublic void onMessage(String message, Session session) {try {// 对消息进行处理JSONObject r = webSocketServer.messageService.insertMessage(message);String userId = r.getString("userId");for (SessionWrap item : sessionList) {// 发送消息的判断逻辑可根据需求修改if (item.getFrom().equals(userId) && item.getType().equals("test")) {item.getSession().getBasicRemote().sendText(r.toJSONString());log.info("【websocket消息】发送消息成功:" + r.toJSONString());}}} catch (Exception e) {log.info("【websocket消息】发送消息失败!错误信息:" + e.getMessage());}}@OnErrorpublic void onError(Session session, Throwable error) {log.error("用户错误,原因:"+error.getMessage());error.printStackTrace();}}

相关文章:

SpringBoot整合WebSocket【代码】

系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、SpringBoot整合ElasticEearch【代码示例】 文章目录 系列文章目录代码下载地址一、效果演示二、引入依赖…...

微服务 第一章 Java线程池技术应用

系列文章目录 第一章 Java线程池技术应用 文章目录 系列文章目录[TOC](文章目录) 前言1、Java创建线程方式回顾1.1、继承Thread类(只运行一次)1.1.1、改造成主线程常驻&#xff0c;每秒开启新线程运行1.1.2、匿名内部类1.1.3、缺点1.1.4、扩展知识&#xff1a;Java内部类1.1.4…...

行业追踪,2023-09-14

自动复盘 2023-09-14 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

传输层协议--UDP

引入 传输层负责数据能够从发送端传输到接收端。 端口号&#xff08;Port&#xff09; 端口号标识了一个主机上进行通信的一个进程。 两个问题&#xff1a; 1. 一个进程可以绑定多个端口号吗&#xff1f;--可以 2.一个端口号可以绑定多个进程吗&#xff1f;--不可以 我们…...

微信会员卡开发流程

功能需求&#xff1a; 通过微信第三方平台创建的模板小程序&#xff0c;想要实现用户在小程序支付一定金额后领取会员卡&#xff0c;领取会员卡后可给用户下发一定数量的优惠券&#xff0c;并且实现用户在小程序消费享受商品折扣。 开发流程&#xff1a; 一、了解微信的3个平…...

《算法竞赛·快冲300题》每日一题:“点灯游戏”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 点…...

常见高级语言的输入与输出训练(一)

文章目录 题目概述1 输入描述: 输出描述: 输入 输出 示例C语言代码 题目概述2 题目描述 输入描述: 输出描述: 输入 输出 示例Java代码 前言 本文主要讲解两个算法题的代码实现 题目概述1 计算ab 打开以下链接可以查看正确的代码 数据范围&#xff1a;数据组数满…...

恭喜!龙蜥获得 2023 大学生操作系统设计赛二等奖及特殊贡献奖

经过多月的激烈角逐&#xff0c;2023 全国大学生系统能力大赛操作系统设计赛&#xff08;以下简称“2023 大学生操作系统赛”&#xff09; 圆满结束。经过 2023 大学生操作系统赛评审组和技术委员会的复核&#xff0c;面向全国公布了此次大赛的获奖名单。龙蜥社区不负众望&…...

中项系统集成项目管理2023上半年真题及解析

中项系统集成项目管理2023上半年真题及解析 上午题1. 在 (1) 领域&#xff0c;我国还远未达到世界先进水平&#xff0c;需要发挥新型举国体制优势&#xff0c;集中政府和市场两方面的力量全力发展2. ChatGPT于 2022年 11 月 30 日发布&#xff0c;它是人工智能驱动的 (2) 工具3…...

实时显示当前文件夹下的文件大小,shell脚本实现

图片来源于网络&#xff0c;如果侵权请联系博主删除&#xff01; 需求&#xff1a; 写一个shell终端命令&#xff0c;实时显示当前文件夹下的文件大小 实现&#xff1a; 您可以使用以下的Shell脚本命令来实时显示当前文件夹下的文件大小&#xff1a; while true; docleardu …...

7、Spring之依赖注入源码解析(下)

resolveDependency()实现 该方法表示,传入一个依赖描述(DependencyDescriptor),该方法会根据该依赖描述从BeanFactory中找出对应的唯一的一个Bean对象。 @Nullable Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName,@Null…...

图片码二次渲染绕过

目录 一、环境 1、代码 2、文件处理方式 3、图片码的制作 二、绕过图片重构 1、可行性分析 2、数据比对 3、完成绕过 一、环境 以upload-labs靶场第十七关为例 1、代码 源码为&#xff1a; <?php include ../config.php; include ../head.php; include ../menu.…...

点评项目核心内容

目录 拦截器设置 集群的session共享问题 基于redis实现共享session登录 创建bean对象技巧 什么是缓存 使用缓存来处理对象 使用String类型缓存来处理集合 缓存更新策略 主动更新策略 缓存穿透 空串""和null的区别 缓存null值解决穿透问题 缓存雪崩 缓存击穿…...

海外商城小程序为什么这么受欢迎?

随着全球化的进程海外商城小程序在近年来获得了广泛的关注和使用。海外商城小程序是一种基于互联网技术的应用程序&#xff0c;为用户提供了便捷的购物体验和跨境交易服务。本文将深入探讨海外商城小程序的受欢迎原因&#xff0c;从多个维度进行分析就其未来发展进行思考&#…...

Linux Day13 ---信号量

一、信号量 1.1 一些概念 用来管理对资源的访问 一个特殊的变量&#xff0c;只允许对它进行等待(wait)和发送信号(signal),代表可用资源个数&#xff0c; 取0,1 二值信号量 取 3,5 计数信号量 p操作&#xff1a;原子减一&#xff0c;代表获取资源&#xff0c;可能阻塞 v…...

《动手学深度学习 Pytorch版》 4.10 实战Kaggle比赛:预测比赛

4.10.1 下载和缓存数据集 import hashlib import os import tarfile import zipfile import requests#save DATA_HUB dict() DATA_URL http://d2l-data.s3-accelerate.amazonaws.com/def download(name, cache_diros.path.join(.., data)): #save"""下载一个…...

jQuery补充

文章目录 简介安装语法选择器元素选择器#id 选择器.class 选择器事件常用事件方法 效果显示隐藏淡入淡出滑动动画停止动画获取内容和属性添加元素删除元素操作css父辈 &#x1f49b;&#x1f49b;孔子云&#xff1a;温故而知新&#xff0c;可以为师矣&#x1f49b;&#x1f49b…...

goaccess 日志分析 nginx

分析命令&#xff1a; goaccess -a -d -f /mnt/winshare/access-2023070112.log -p goaccess.conf -o /mydata/nginx/html/2023070112_new.html分析日志时的参数 goaccess使用参数详解-a 开启 UserAgent 列表。开启后会降低解析速度 -c 在程序开始运行时显示 日志/日期 配…...

认养一头牛———众筹+合伙人商业模式解析

2016年成立以来&#xff0c;认养一头牛致力于打造数字化乳业第一品牌&#xff0c;只为一杯好牛奶。公司在创立三年内完成了10个亿销售目标&#xff0c;被业界称为新消费品牌黑马&#xff0c;一举闯入互联网新消费梯队的视线。未来三年&#xff0c;认养一头牛将着力打造全国最大…...

前端面试的话术集锦第 11 篇:高频考点(React和Vue两大框架)

这是记录前端面试的话术集锦第十一篇博文——高频考点(React和Vue两大框架),我会不断更新该博文。❗❗❗ React 和Vue应该是国内当下最火热的前端框架。当然,Angular也是一个不错的框架,但是这个产品,国内使用的人很少,因而,框架的章节中不会涉及到Angular的内容。 这…...

Midjourney V6啤酒标签设计实战:3步生成高转化率精酿包装,附可复用Prompt模板

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney V6啤酒标签设计实战&#xff1a;3步生成高转化率精酿包装&#xff0c;附可复用Prompt模板 精准定义品牌视觉语义 Midjourney V6 对文本理解显著增强&#xff0c;需将抽象品牌调性转化为可解…...

边缘计算中ViT模型压缩与硬件加速技术解析

1. 边缘计算中的ViT模型压缩技术全景解析Vision Transformer&#xff08;ViT&#xff09;模型在计算机视觉领域展现出卓越性能的同时&#xff0c;其庞大的计算量和内存需求成为边缘设备部署的主要障碍。模型压缩技术通过降低模型复杂度&#xff0c;使其能够在资源受限的边缘设备…...

ChatGPT对话转Anki卡片:自动化工具实现与高效学习流搭建

1. 项目概述&#xff1a;从ChatGPT对话到Anki卡片的自动化桥梁最近在整理学习笔记时&#xff0c;我发现了一个效率痛点&#xff1a;和ChatGPT的对话里充满了高质量的知识点&#xff0c;但要把它们变成可以复习的Anki卡片&#xff0c;过程却异常繁琐。复制、粘贴、手动制卡&…...

MCP协议与Personas角色:为AI助手打造专属工具箱的实践指南

1. 项目概述&#xff1a;当AI助手拥有“专属工具箱”如果你和我一样&#xff0c;每天都在和各类AI助手打交道&#xff0c;从ChatGPT到Claude&#xff0c;再到国内外的各种大模型应用&#xff0c;你可能会发现一个共同的痛点&#xff1a;这些助手虽然知识渊博&#xff0c;但“动…...

Sidekiq监控测试终极指南:如何全面检测系统状态与性能

Sidekiq监控测试终极指南&#xff1a;如何全面检测系统状态与性能 【免费下载链接】sidekiq Simple, efficient background processing for Ruby 项目地址: https://gitcode.com/gh_mirrors/si/sidekiq Sidekiq作为Ruby生态中最流行的后台作业处理框架&#xff0c;其强大…...

终极 ChatGPT-Google 扩展日志分析指南:深度洞察用户行为与功能使用统计 [特殊字符]

终极 ChatGPT-Google 扩展日志分析指南&#xff1a;深度洞察用户行为与功能使用统计 &#x1f50d; 【免费下载链接】chatgpt-google-extension This project is deprecated. Check my new project ChatHub: 项目地址: https://gitcode.com/gh_mirrors/ch/chatgpt-google-ext…...

SolidityPy全课程:从零到一的区块链智能合约开发终极指南

SolidityPy全课程&#xff1a;从零到一的区块链智能合约开发终极指南 【免费下载链接】full-blockchain-solidity-course-py Ultimate Solidity, Blockchain, and Smart Contract - Beginner to Expert Full Course | Python Edition 项目地址: https://gitcode.com/gh_mirro…...

NotebookLM企业许可陷阱全解析,合同里没写的5个自动续费条款正在吞噬你的IT预算

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM定价性价比分析 NotebookLM 是 Google 推出的面向研究与知识整合的 AI 笔记工具&#xff0c;其核心价值在于对用户上传文档&#xff08;PDF、TXT 等&#xff09;进行语义理解并生成上下文精准…...

2026年南京GEO优化行业乱象解析:差异化痛点与行业合规发展建议

伴随生成式人工智能普及&#xff0c;GEO生成式引擎优化成为南京本地企业数字化布局的重要渠道。2026年本地传统线下企业、中小型工贸企业、服务业企业普遍入局AI内容优化赛道。目前南京GEO服务市场入局主体繁杂&#xff0c;包含传统SEO转型团队、小型个人工作室、本土科技企业、…...

RK3576开发板GPIO实战:从硬件寻址到libgpiod应用详解

1. 项目概述最近在折腾一块基于瑞芯微RK3576芯片的开发板&#xff0c;发现很多朋友拿到板子后&#xff0c;对如何上手使用其GPIO&#xff08;通用输入输出&#xff09;接口感到有些迷茫。网上的资料要么太零散&#xff0c;要么直接丢给你一堆寄存器手册&#xff0c;对于实际应用…...