一个最简单基于spring的websocket服务端+客户端实现案例
1、服务端
代码分为两部分:
一个是服务器终端类:用java注解来监听连接@ServerEndpoint、连接成功@OnOpen、连接失败@OnClose、收到消息等状态@OnMessage
import org.springframework.stereotype.Component;import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;@Component
@ServerEndpoint("/websocket/fqa")
public class QwenWebSocket {@OnOpenpublic void onOpen(Session session){System.out.println("WebSocket opened: " + session.getId());}@OnMessagepublic void onMessage(String message, Session session){System.out.println("Message received: " + message);try{session.getBasicRemote().sendText("Echo: " + message);}catch (IOException e){e.printStackTrace();}}@OnClosepublic void onClose(Session session){System.out.println("WebSocket closed: " + session.getId());}@OnErrorpublic void onError(Throwable t){t.printStackTrace();}
}
一个是websocket的配置类,用于把spring中的ServerEndpointExporter对象注入进来
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;@Configuration
public class WebSocketConfig {/*** 这个bean的注册,用于扫描带有@ServerEndpoint的注解成为websocket,如果你使用外置的tomcat就不需要该配置文件*/@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}
}
2、客户端
普通的java工程即可,不需要是spring。
import javax.websocket.*;
import java.net.URI;@ClientEndpoint
public class MyWebSocketClient {@OnOpenpublic void onOpen(Session session){System.out.println("Connected to server");}@OnMessagepublic void onMessage(String message){System.out.println("Received message: " + message);}@OnClosepublic void onClose(CloseReason reason){System.out.println("Closing: " + reason.getReasonPhrase());}public static void main(String[] args) {try{WebSocketContainer container = ContainerProvider.getWebSocketContainer();URI uri = URI.create("ws://localhost:8080/websocket/fqa");Session session = container.connectToServer(MyWebSocketClient.class, uri);session.getBasicRemote().sendText("I'm client!");Thread.sleep(10000);}catch(Exception e){e.printStackTrace();}}
}
3、效果
客户端显示:
Connected to server
Received message: Echo: I'm client!
服务端显示:
WebSocket opened: 4
Message received: I'm client!
WebSocket closed: 4
相关文章:
一个最简单基于spring的websocket服务端+客户端实现案例
1、服务端 代码分为两部分: 一个是服务器终端类:用java注解来监听连接ServerEndpoint、连接成功OnOpen、连接失败OnClose、收到消息等状态OnMessage import org.springframework.stereotype.Component;import javax.websocket.*; import javax.websoc…...
三.二、关于 Vue.js 中`transition`组件使用:页面切换动画和标签移动动画都是要用到的
一、引言 在 Vue.js 中,transition组件提供了一种简单而强大的方式来实现页面过渡效果。它可以让元素在状态改变时,如进入或离开视图时,以平滑的动画方式进行过渡。通过transition,我们可以为应用增添更加生动和吸引人的用户体验…...
指纹考勤系统
目录 1.课题研究目的和内容 1.1 课题研究目的 1.2 课题研究内容 2.系统总体方案设计及功能模块介绍 2.1总体方案设计 2.2 ATK-301模块介绍 2.3 TFTLCD显示功能模块介绍 2.4 蜂鸣器报警功能模块介绍 2.5 时钟模块介绍 3.系统硬件设计与实现 3.1 系统硬件电…...
怎么找抖音视频素材?下载抖音的素材视频网站分享给你
在这个视觉印象至关重要的时代,选用高质量的视频素材对于制作抖音视频来说是关键。如果你正在寻找适合的视频素材来丰富你的抖音创作,以下这份详细的视频素材网站指南将帮助你迈出第一步。 蛙学府网 蛙学府网提供了丰富多样的视频素材,包括动…...
【pytorch】大模型训练张量并行
Large Scale Transformer model training with Tensor Parallel (TP) 张量并行如何工作 原始 Tensor Parallel (TP) 模型并行技术于Megatron-LM论文中被提出,是一种用于培育大规模Transformer模型的高效模型并行技术。我们在本练习指南中介绍的序列并行 (SP) 实际…...
Flutter 中的 CupertinoSliverNavigationBar 小部件:全面指南
Flutter 中的 CupertinoSliverNavigationBar 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它允许开发者使用 Dart 语言来构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中,CupertinoSliverNavigation…...
【数据库系统概论】程序题
“学生管理数据库”包含以下三个表,即学生表Student、课程表Course和选课表SC,结构如下: Student(Sno,Sname,Ssex,Sage,Sdept)Course (Cno,Cname&…...
群体优化算法---蝙蝠优化算法分类Iris数据集
介绍 蝙蝠算法(Bat Algorithm, BA)是一种基于蝙蝠回声定位行为的优化算法。要将蝙蝠算法应用于分类问题,可以通过将蝙蝠算法用于优化分类器的参数,图像分割等 本文示例 我们使用一个经典的分类数据集,如Iris数据集&…...
【C++】类和对象1.0
本鼠浅浅介绍一些C类和对象的知识,希望能得到读者老爷们的垂阅! 目录 1.面向过程和面向对象 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1.类的访问限定符 4.2.封装 5.C中struct和class的区别 6.类域 7.类的实例化 8.类对象模型 8.1.类…...
Linux下gcc编译32位程序报错
gcc使用-m32选项,编译32位程序时,报错:/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory gcc编译32位程序时,报错:/usr/include/stdio.h:27:10: fatal error: bits/li…...
godot.bk
1.搜索godot国内镜像,直接安装,mono是csharp版本 2.直接解压,50m,无需安装,直接运行 3.godot里分为场景,节点 主场景用control场景,下面挂textureact放背景图片,右键实例化子场景把…...
【C++修行之道】类和对象(三)拷贝构造函数
目录 一、 概念 二、特征 正确的拷贝构造函数写法: 拷贝函数的另一种写法 三、若未显式定义,编译器会生成默认的拷贝构造函数。 四、编译器生成的默认拷贝构造函数已经可以完成字节序的值拷贝了,还需要自己显式实现吗? 深拷…...
校园外卖系统的技术架构与实现方案
随着校园生活的日益现代化,外卖需求在高校学生群体中迅速增长。为了满足这一需求,校园外卖系统应运而生。本文将详细探讨校园外卖系统的技术架构及其实现方案,帮助读者了解这一系统的核心技术与实现路径。 一、系统概述 校园外卖系统主要包…...
AI的制作思维导图
AI(人工智能)的实现通常涉及以下几个步骤: 1.问题定义:首先确定你想要解决的问题是什么,这将决定你需要设计什么样的系统。 2.数据收集:根据你的需求,收集相关的数据集来训练你的AI模型。数据的…...
Amazon云计算AWS(四)
目录 八、其他Amazon云计算服务(一)快速应用部署Elastic Beanstalk和服务模板CloudFormation(二)DNS服务Router 53(三)虚拟私有云VPC(四)简单通知服务和简单邮件服务(五&…...
数据库(21)——数值函数
数值函数 函数功能CEIL(x)向上取整FLOOR(x)向下取整MOD(x,y)返回x/y的余数RAND()返回0~1内的随机数ROUND(x,y) 求参数x的四舍五入的值,保留y位小数 演示 select ceil(66.4); select floor(8.9); select mod(3,10); select rand(); select round…...
【PB案例学习笔记】-15怎样限制应用程序运行次数?
写在前面 这是PB案例学习笔记系列文章的第15篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…...
Spring为什么不支持static字段注入
Spring不支持直接依赖注入到静态变量中。在Spring框架中,依赖注入是一个核心概念,它允许开发者将对象间的依赖关系定义转移到容器中,由容器负责管理这些依赖关系。然而,当涉及到静态变量时,情况就变得复杂了。 首先从…...
AI数据分析:用Kimi根据Excel表格数据绘制多条折线图
工作任务:将Excel文件中的学生姓名和他们的语文、数学、英语成绩绘制成三条折线图,以便于比较不同科目的成绩分布情况。 在kimi中输入提示词: 你是一个Python编程专家,要完成一个Python脚本编写的任务,具体步骤如下&a…...
高级 Go 程序设计:使用 net/http/httputil 包构建高效网络服务
高级 Go 程序设计:使用 net/http/httputil 包构建高效网络服务 介绍ReverseProxy 的使用基本概念实现步骤高级配置实际案例 DumpRequest 的使用功能说明代码示例应用场景NewSingleHostReverseProxy 的特性功能概述 详细教程 注意事项使用 NewChunkedWriter 实现高效…...
三维空间频谱时序预测模型开发完整报告
三维空间频谱时序预测模型开发完整报告 一、项目背景与目标 本项目基于UrbanRadio3D静态数据集,构建端到端的深度学习模型,实现对低空三维空间频谱(路径损耗)的时序演化预测。城市环境中的无线电传播受建筑物遮挡、反射等因素影响,呈现出复杂的空间分布和时间动态特性(…...
Linux 定时备份 MySQL 数据库(完整教程)
为了防止数据丢失,我们需要定时把数据备份起来。我们使用用 Linux crontab mysqldump 实现定时自动备份,包含备份、压缩、保留历史、自动清理旧文件。一、先准备备份脚本创建一个备份脚本 mysql_backup.sh,放在 /usr/local/bin/ 方便管理。#…...
湿敏电阻(Humidity Sensitive Resistor)气敏电阻
湿敏电阻(Humidity Sensitive Resistor)&气敏电阻 湿敏电阻是一种对环境湿度(尤其是相对湿度 RH)敏感的电阻器, 湿度升高 → 电阻通常降低(多数类型)湿敏电阻器可分为正温度特性湿敏电阻器(阻值随湿度增大而增大)和负温度特性湿敏电阻器(阻值随湿度增大而减小). 本质 利用材…...
py每日spider案例之某website参数token获取(ob混淆,难度一般)
逆向参数: 请求代码: import requestsheaders = {"accept": "*/*","accept-language": "zh-CN,zh;q=0.9","cache-control": "n...
群晖NAS+Docker实战:手把手教你部署Llama 2打造私有化AI助手
1. 为什么要在群晖NAS上部署Llama 2? 最近两年,大语言模型(LLM)的火爆程度有目共睹。但大多数人都只能通过网页或API使用这些服务,不仅响应速度慢,还面临着隐私泄露的风险。而群晖NAS作为家庭和小型办公室的…...
gf观察窗口高级用法:自定义类型显示和动态数组支持终极指南
gf观察窗口高级用法:自定义类型显示和动态数组支持终极指南 【免费下载链接】gf A GDB frontend for Lnux. 项目地址: https://gitcode.com/gh_mirrors/gf3/gf gf作为一款强大的GDB前端调试工具,其观察窗口功能为开发者提供了直观的变量查看体验。…...
C语言完美演绎6-21
/* 范例:6-21 */#include<stdio.h> #include<conio.h>int main(){int n;printf("这是nn乘法表,请输入一值>");scanf("%d",&n);int i1;for(;i<n;) /* i从1到n次循环*/{int j1;for(;j<n;) /…...
第6章 数据类型转换-6.6 转换为元组
通过使用tuple()函数可以将字符串、列表或集合转换为元组。其语法格式如下:tuple([x])其中,参数x为可选参数,表示字符串、列表或集合,如果省略该参数,则该函数返回空元组。示例代码如下:# 资源包\Code\chap…...
告别手动抄表!用Python+ADS一键导出TwinCAT3 PLC数据到Excel
工业数据自动化采集实战:PythonADS高效处理TwinCAT3 PLC数据 每次月底报表截止日前,产线工程师小李总要加班到深夜——他需要从12台设备的PLC中手动记录温度、压力和产量数据,再逐个录入Excel制作日报。这种重复劳动不仅耗时耗力,…...
WaveTools终极指南:如何解锁鸣潮120FPS帧率限制并优化游戏体验
WaveTools终极指南:如何解锁鸣潮120FPS帧率限制并优化游戏体验 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools WaveTools是一款专为《鸣潮》玩家设计的开源工具箱,通过智能配置修改…...
