Websocket实现方式二——注解方式
添加Websocket依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
根据@ServerEndpoint注解注册Websocket
@Configuration
public class AgentWsConfig {@Beanpublic ServerEndpointExporter serverEndpointExporter(){return new ServerEndpointExporter();}}
创建Websocket注解实现的类@ServerEndpoint注解标记类
@ServerEndpoint("/websocket/{sessionId}")
@Component
@Slf4j
public class AgentWsServerPoint {/*** websocket连接集合,根据Redis广播来的sessionId,来管理Session(取用和删除)*/private static final Map<String, Session> SESSION_MAP = new ConcurrentHashMap<>();/*** 建立连接* @param sessionId* @param session*/@OnOpenpublic void onOpen(@PathParam("sessionId") String sessionId, Session session) {SESSION_MAP.put(sessionId, session);log.info("WebSocket已打开,会话ID是:{}", sessionId);log.info(sessionId + "建立了连接");}/*** 接收消息并发送消息* @param sessionId* @param message* @param session* @return*/@OnMessagepublic String onMessage(@PathParam(value = "sessionId") String sessionId,String message, Session session) throws Exception {log.info(sessionId + ":" + message);//客户端推送过来的消息Session session = SESSION_MAP.get(sessionId);try {session.getBasicRemote().sendText("Hello World!"); // 给特定用户发送消息log.info("消息发送成功");} catch (IOException e) {e.printStackTrace();log.error("消息发送失败");throw e;}return null;}/*** 关闭连接* @param sessionId* @param session*/@OnClosepublic void onClose(@PathParam(value = "sessionId") String sessionId,Session session) throws IOException {if(SESSION_MAP.containsKey(sessionId)){Session session1 = SESSION_MAP.get(sessionId);session1.close();SESSION_MAP.remove(sessionId);}log.info("websocket is close ,session id is {}",sessionId);}}相关文章:
Websocket实现方式二——注解方式
添加Websocket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>根据ServerEndpoint注解注册Websocket Configuration public class AgentWsConfig …...
零基础开始学习鸿蒙开发-页面导航栏布局设计
目录 1.设定初始页(Idex.ets) 2.自定义首页组件 3.自定义发现页面组件 4.自定义设置页面组件 总结:主要是运用 了Tabs组件对导航栏进行布局,然后运用BottomTabBarStyle组件嵌套图标和文字,完成导航栏的制作。 1.设定初始页(Idex.ets) import {find}…...
【Hive中常见的优化手段----数据采集!Join 优化!Hive索引!数据倾斜!mapreduce本地模式!map和reduce数量调整!】
前言: 💞💞大家好,我是书生♡,今天主要和大家分享一下Hive中常见的优化手段----数据采集!常见的Join 优化有哪几种!什么是Hive索引!数据怎么发生倾斜!什么是mapreduce的本…...
【面试系列】软件工程师高频面试题及详细解答
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…...
Qt开发 | Qt界面布局 | 水平布局 | 竖直布局 | 栅格布局 | 分裂器布局 | setLayout使用 | 添加右键菜单 | 布局切换与布局删除重构
文章目录 一、Qt界面布局二、Qt水平布局--QHBoxLayout三、Qt竖直布局四、Qt栅格布局五、分裂器布局代码实现六、setLayout使用说明七、布局切换与布局删除重构1.如何添加右键菜单2.布局切换与布局删除重构 一、Qt界面布局 Qt的界面布局类型可分为如下几种 水平布局(…...
LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection
LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection 论文链接:http://arxiv.org/abs/2406.03459 代码链接:https://github.com/Atten4Vis/LW-DETR 一、摘要 介绍了一种轻量级检测变换器LWDETR,它在实时物体检测方面超越…...
前端技术(二)——javasctipt 介绍
一、javascript基础 1. javascript简介 ⑴ javascript的起源 ⑵ javascript 简史 ⑶ javascript发展的时间线 ⑷ javascript的实现 ⑸ js第一个代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>…...
FireFox 编译指南2024 Windows10篇-环境准备(一)
1. 引言 在开源浏览器项目中,Firefox因其高性能和灵活性而备受开发者青睐。为了在本地环境中编译和定制Firefox,开发者需要做好充分的环境准备工作。这不仅是编译成功的基础,也是后续调试、优化和二次开发的关键步骤。 编译Firefox是一个复…...
Spring Boot中的热部署配置
Spring Boot中的热部署配置 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot项目中实现热部署配置,提升开发效率和项…...
用ChatGPT快速打造一个专业WordPress网站
作为一个使用HostEase多年的老用户,我想和大家分享一下如何利用HostEase和ChatGPT快速构建一个WordPress网站的经验。这不仅仅是一个简单的操作步骤,更是一次从零到有的实战经历。希望我的分享能给你们带来一些实用的帮助。 获取主机服务和域名 首先&a…...
dsp入门
安装环境 安装 ccs5.5安装 BIOS-MCSDK 多核软件开发包安装 仿真器驱动 工程创建与导入工程 创建工程 创建工程填信息添加.cmd文件,配置内存编译 导入工程 导入 配置工程 选择properties 环境变量 头文件 库文件 仿真器 添加仿真器 先调出仿真器界面创建仿…...
Java并发编程-Atomiclnteger、LongAdder等原子类的使用及案例实战
文章目录 i++和Atomiclnteger之间的差别分析以及使用介绍i++AtomicInteger使用介绍i++ 示例AtomicInteger 示例总结Atomiclnteger中的CAS无锁化原理和思路介绍CAS 原理AtomicInteger 的 CAS 应用无锁化思路Atomiclnteger源码剖析:仅限JDK内部使用的Unsafe类`Unsafe` 类的关键作…...
九浅一深Jemalloc5.3.0 -- ②浅*size class
目前市面上有不少分析Jemalloc老版本的博文,但5.3.0却少之又少。而且5.3.0的架构与之前的版本也有较大不同,本着“与时俱进”、“由浅入深”的宗旨,我将逐步分析Jemalloc5.3.0的实现。 另外,单讲实现代码是极其枯燥的,…...
JavaScript——属性的增删改查
目录 任务描述 相关知识 属性的获取 方式一 方式二 属性的修改与新增 删除属性 编程要求 任务描述 Luma Restaurant 以前的财务人员在统计销售额的时候不小心把数据弄错了,现在的财务人员想通过一个 JavaScript 函数方便的修改数据,并署上自己的…...
51单片机第15步_串口多机通讯使用CRC8校验
本章重点介绍串口多机通讯使用CRC8校验。 数据格式:"$123xxxx*crc8\r\n"; 如:"$1234567890ABCDEF*06\r\n" 如:"$1231234567890*31\r\n" crc8是CRC校验值,为十六进制的ASCII码,不包含$和校验值前面的那个* #include <REG51.h> //包含…...
WPF----进度条ProgressBar(渐变色)
ProgressBar 是一种用于指示进程或任务的进度的控件,通常在图形用户界面(GUI)中使用。它提供了一种视觉反馈,显示任务的完成程度,帮助用户了解任务的进展情况。 基本特性 Minimum 和 Maximum 属性: 这些属…...
Apipost接口测试工具的原理及应用详解(四)
本系列文章简介: 随着软件行业的快速发展,API(应用程序编程接口)作为不同软件组件之间通信的桥梁,其重要性日益凸显。API的质量直接关系到软件系统的稳定性、性能和用户体验。因此,对API进行严格的测试成为…...
【图论】200. 岛屿问题
200. 岛屿问题 难度:中等 力扣地址:https://leetcode.cn/studyplan/top-100-liked/ 问题描述 给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围&…...
AI学习指南机器学习篇-随机森林的优缺点
AI学习指南机器学习篇-随机森林的优缺点 引言 机器学习是人工智能领域的重要分支,其中随机森林(Random Forest)算法以其高性能和广泛应用而备受瞩目。然而,就像任何其他算法一样,随机森林也有其优缺点。本文将深入探讨随机森林算法的优势和…...
基于boost::beast的http服务器(上)
文章目录 1.beast网落库介绍2.相关类及api3.异步读写的处理3.1异步写案例3.2异步读案例 1.beast网落库介绍 Beast网络库是一个基于Boost库的C网络库,特别用于开发高性能的网络应用程序。它提供了一组易于使用的API,主要用于处理HTTP和WebSocket协议&…...
科研助手实战:OpenClaw+Qwen3.5-9B自动整理文献笔记
科研助手实战:OpenClawQwen3.5-9B自动整理文献笔记 1. 为什么需要自动化文献管理 作为一名经常需要阅读大量文献的研究者,我发现自己每天要花费至少2小时在重复性劳动上:下载PDF、标注重点、整理笔记、核对参考文献格式。这些工作虽然简单&…...
OpenClaw压力测试:QwQ-32B持续任务负载表现
OpenClaw压力测试:QwQ-32B持续任务负载表现 1. 测试背景与目标 最近我在本地部署了OpenClaw框架,并接入了一台搭载QwQ-32B模型的服务器。作为一个追求稳定性的技术爱好者,我特别想知道这个组合在长时间运行时的表现如何。于是,我…...
阿里云服务器+域名备案全流程避坑指南(附小程序开发必备配置)
阿里云服务器与域名备案实战指南:从小程序开发到前后端部署全解析 第一次在阿里云上配置服务器并完成域名备案的经历,就像新手司机独自上高速——既兴奋又忐忑。记得去年我们团队开发校园服务小程序时,原本计划两周完成的服务器部署ÿ…...
EdgeRemover:终极指南 - 如何高效彻底移除Windows Edge浏览器
EdgeRemover:终极指南 - 如何高效彻底移除Windows Edge浏览器 【免费下载链接】EdgeRemover PowerShell script to remove Microsoft Edge in a non-forceful manner. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover EdgeRemover是一个专业的Powe…...
零基础入门:收藏必备!从Agent概念到实战构建,小白也能掌握AI新趋势
本文系统梳理了AI Agent的核心概念、原理及构建模式,通过对比ReAct和Plan-and-Execute等主流模式,阐述了Agent如何从被动对话转向主动行动。文章详细介绍了构建Agent的思路和关键组件,如主程序、行为说明书和工具集,适合对AI Agen…...
别再只画流程图了!用AntV G6-Editor在Angular里搭建一个可交互的作业调度系统
用AntV G6-Editor在Angular中构建企业级作业调度可视化平台 当我们需要在Angular项目中实现复杂的作业调度系统时,传统的流程图工具往往难以满足业务需求。AntV G6-Editor作为专业级可视化编辑框架,提供了从基础绘图到深度定制的完整解决方案。本文将带你…...
7个强力策略!Seafile插件市场终极推广指南:提升曝光与用户采纳率全攻略
7个强力策略!Seafile插件市场终极推广指南:提升曝光与用户采纳率全攻略 【免费下载链接】seafile High performance file syncing and sharing, with also Markdown WYSIWYG editing, Wiki, file label and other knowledge management features. 项目…...
Qwen3-4B写作大师优化技巧:3个提示词方法让AI输出质量翻倍
Qwen3-4B写作大师优化技巧:3个提示词方法让AI输出质量翻倍 1. 为什么提示词对Qwen3-4B如此重要 Qwen3-4B-Instruct不是普通的文本生成模型,而是一个具备深度推理能力的AI写作伙伴。与基础模型不同,它经过专门的指令微调(Instruc…...
Fish Speech 1.5企业落地手册:对接CRM/知识库构建智能语音助手
Fish Speech 1.5企业落地手册:对接CRM/知识库构建智能语音助手 想象一下,你的客户服务系统能自动用自然、亲切的声音回答客户咨询,你的内部知识库能“开口说话”,为员工提供语音指引。这听起来像是科幻场景,但今天&am…...
从“触觉神经”到“智能反射”:六维力传感器如何重塑人形机器人的交互范式
1. 六维力传感器:人形机器人的"触觉神经" 想象一下你闭着眼睛伸手去拿桌上的水杯。在指尖接触杯壁的瞬间,你的皮肤会感知压力变化,神经信号以毫秒级速度传递到大脑,手指肌肉随即调整力度——既不会捏碎杯子,…...
