两种实现WebSocket的方式,基于Java实现WebSocket。

首先我们声明WebSocker方便打字为ws。

WebSocker ws = new WebSocket();

1,首先是导包啦

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>

或者说启用spring框架,因为spring已经整合了ws。

2,编写配置类

配置类:把spring中的ServerEndpointEx

@Configuration//说明他是一个配置类--》作用就是注入bean
public class WSConfig {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}
}

porter对象注入进来

3,编写服务终端类

用iava注解来

@ServerEndpoint          监听连接、

@OnOpen          连接成功、

@OnClose        连接关闭、

@OnMessage        客户端接收服务端数据触发等

//这个类的作用:监听客户端谁连接了服务端。
@ServerEndpoint("/myWs")    //编写监听的连接地址
@Component                  //被扫描到注入spring管理对象
@Slf4j                      //打印日志
public class wsServerEndpont {//为了方便找到个session,所以使用了Hashmap。如果使用list需要遍历集合。//为了线程安全使用ConcurrentHashMap。static Map<String, Session> map = new ConcurrentHashMap<>();@OnOpen  //客户端连接到服务端的时候,声明服务端做的事情public void onOpen(Session session) { //每一个web连接对于服务端都是一个session//连接之后保留这段session。map.put(session.getId(), session);}@OnMessage //收到客户端消息,执行的操作public String onMessage(String str) { //接收到的消息log.info("收到的消息{}", str);return "已收到消息";     //返回的消息}@OnClose //用户连接关闭时执行的操作。public void onClose(Session session) {map.remove(session.getId());log.info("浏览器以退出");}//实现定时任务@Scheduled(fixedRate = 2000)  //每隔多少秒执行定时任务public void sengMsg(String message) throws IOException {//向每个客户端发送请求for (String s : map.keySet()) {                 //遍历对象map.get(s)                                  //或与session对象.getBasicRemote()                   //获取session的远端.sendText("想每一台用户");         //发送那个业务}}}

@OnOpen 获取的session很重要

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

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

相关文章

微软等开源评估ChatGPT、Phi、Llma等,统一测试平台

微软亚洲研究院、中国科学院自动化研究所、中国科学技术大学和卡内基梅隆大学联合开源了&#xff0c;用于评估、分析大语言模型的统一测试平台——PromptBench。 Prompt Bench支持目前主流的开源、闭源大语言模型&#xff0c;例如&#xff0c;ChatGPT、GPT-4、Phi、Llma1/2、G…

基于虚拟机安装centos且远程连接

基于虚拟机安装centos且远程连接 1、安装虚拟机 目前市面上的虚拟机种类有很多&#xff0c;我们可以选择自己熟悉的虚拟机进行安装&#xff0c;我在这里用的虚拟机是VMware。具体的安装过程很简单&#xff0c;一直点击下一步就可以了。因为VMware虚拟机需要激活&#xff0c;所…

UniApp面试题

面试题1 问&#xff1a;什么是 UniApp&#xff1f;它有哪些特点&#xff1f; 答&#xff1a;UniApp 是一种基于 Vue.js 开发跨平台应用的框架。它可以同时构建运行在多个平台&#xff08;包括但不限于小程序、H5、App&#xff09;的应用程序。UniApp 的特点包括&#xff1a;一…

AI语音识别模块--whisper模块

1.下载 ffmpeg&#xff0c;挑一个自己电脑系统的版本&#xff0c;下载&#xff0c;如我win64&#xff1a; 地址&#xff1a; Releases BtbN/FFmpeg-Builds GitHub 下载压缩包zip&#xff0c;到本地 解压安装&#xff0c;其实无需安装&#xff0c;只需把对应的目录下的bin&…

【Matlab】在Matlab中安装优化工具yalmip的方法

最近博主想做一些关于多目标优化的问题&#xff0c;因为之前对Matlab有一定经验&#xff0c;所以直接在网上查找了如何在Matlab上实现多目标优化的文献&#xff0c;看到有人提到了yamip&#xff0c;于是博主就试着在Matlab中安装yamip&#xff0c;将其中遇到的问题和一些经验和…

JMeter相关问题及答案(2024)

1、什么是 JMeter&#xff1f; JMeter是一个开源的、Java编写的负载测试工具&#xff0c;用于对软件和服务进行性能测试。它最初是为测试Web应用程序而设计的&#xff0c;但现在已广泛应用于测试其他协议和技术&#xff0c;如HTTP、HTTPS、SOAP、RESTful、FTP、数据库、JMS等。…

正式阶段高等数学复习--导数的定义

导数的定义这一部分知识点包括&#xff1a;导数的概念、微分的概念、导数与微分的几何意义、连续可导可微之间的关系&#xff1b;而题型呢包含有已知导数求极限&#xff08;凑&#xff09;&#xff0c;已知极限求可导&#xff0c;判断分段函数或者&#xff08;F(x)f(x)*g(x),f(…

香橙派--编译MNN报错,关于汇编的嵌套展开

先看报错&#xff1a; /home/orangepi/MNN-master/source/backend/cpu/arm/arm64/bf16/ARMV86_MNNPackedMatMulRemain_BF16.S:158: Fatal error: macros nested too deeply再看代码&#xff1a; PostTreatLH8:FMAX v9, v15, v16, v17, v18FMAX v9, v19, v20, v21, v22FMAX v9…

缓存学习实战篇

缓存练习题&#xff08;用户查询操作&#xff09; public List<ShopType> queryAllType() throws JsonProcessingException {//从缓存中查数据String shopTypeJson stringRedisTemplate.opsForValue().get("cache:shopType");//如果缓存命中&#xff0c;if (S…

1.7用REST API实现dynv6脚本(上)

专栏导航 第六章 用命令得到ip和域名解析<网络> 第七章 用REST API实现dynv6脚本(上) ⇐ 第八章 用REST API实现dynv6脚本(下) 用折腾路由的兴趣,顺便入门shell编程。 文章目录 专栏导航前言一、正则表达式基础二、梅林自定义ddns-start1、API选择2、流程图三、代码实…

申请ZeroSSL泛域名域名证书 并部署阿里云测试

安装acme.sh 安装过程中可能会失败 多试几次就会成功 wget -O - https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online -m 你的邮箱gmail.com安装完成后重新加载 Bash&#xff1a; source ~/.bashrc然后也可以开启自动更…

客户端请求服务器的步骤

当我们在浏览器地址栏输入’http://www.xxx.com/api/xxx"时&#xff0c;客户端是如何找到服务器并发送请求的&#xff1f; 1.先找到服务器 a.检测浏览器缓存有没有缓存该域名对应的IP地址&#xff0c;有则通过IP地址取找服务器。 b.检测本地的hosts文件&#xff0c;是否有…

FPGA 高端项目:基于 SGMII 接口的 UDP 协议栈,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案本协议栈的 1G-UDP版本本协议栈的 10G-UDP版本本协议栈的 25G-UDP版本1G 千兆网 TCP-->服务器 方案1G 千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案 3、该UDP协议栈性能4、详细设计方案设…

NX二次开发PK获取对象类型

PK_ENTITY_ask_class(),获取对象类型建议用这个函数&#xff0c;比较通用&#xff0c;包含所有对象类型&#xff0c;可以替代UF_MODL_ask_edge_type(),UF_MODL_ask_body_type(),UF_MODL_ask_face_type()等函数 PK_ENTITY_t entity; PK_CLASS_t PK_TYPE; PK_ENTITY_ask_class(e…

Dapper-OracleSQLHelper 通用封装

/// <summary> /// Oracle Help 封装使用 /// </summary> /// <typeparam name"T"></typeparam> public class OracleSQLDapperHelper<T> where T : class { /// <summary> /// 数据库连接…

openAI API key不需要中转,自己就可以使用正版

很多小伙伴因为不知道怎么使用原版&#xff0c;用的都是国内套壳的&#xff0c;国内套壳的有些价格不合适&#xff0c;如何是3.5的话只需要绑定虚拟信用卡就可以使用 想使用openai API key4.0的话你需要先开通ChatGPTplus&#xff0c;在绑定openai API key&#xff0c;绑定ope…

Spring事务失效场景之类内部方法调用及解决方案

一、背景 在日常开发中&#xff0c;经常有需要使用事务来保证数据一致性的情况。简单点的话直接在方法上面加Transactional注解就可以了。 但这样存在一个问题&#xff0c;在整个业务方法层面加注解会把很多并不需要归入事务的操作也归入到了事务里面&#xff0c;这样会可能会…

算法第十七天-构造有效字符串的最少插入数

构造有效字符串的最少插入数 题目要求 解题思路 考虑abc的个数 假设答案有n个"abc"组成&#xff0c;那么需要插入的字符个数为 3 ∗ n − l e n ( s ) 3*n - len(s) 3∗n−len(s)。 对于相邻的两个字符x和y&#xff08;x在y左侧&#xff09;&#xff1a; 如果 x…

OCR字符识别:开始批量识别身份证信息

身份证信息批量识别OCR是一项解决方案&#xff0c;它能够将身份证照片打包成zip格式或通过URL地址进行提交&#xff0c;并能够识别照片中的文本信息。最终&#xff0c;用户可以将识别结果生成为excel文件进行下载。 API接口功能&#xff1a; 1. 批量识别&#xff1a;支持将多…

【面试合集】2.说说微信小程序的生命周期函数有哪些?

面试官&#xff1a;说说微信小程序的生命周期函数有哪些&#xff1f; 一、是什么 跟vue、react框架一样&#xff0c;微信小程序框架也存在生命周期&#xff0c;实质也是一堆会在特定时期执行的函数 小程序中&#xff0c;生命周期主要分成了三部分&#xff1a; 应用的生命周期…