webSocket + springboot+vue3用法

领导安排个任务,大屏显示数据,要与后台数据一致,所以用到了websocket,涉及的前后端代码整理如下,希望对大家有所帮助。

后端代码

pom文件添加依赖

<!--websocket依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>2.7.0</version>
</dependency>

Java  WebSocketConfig 配置文件

package com.example.only.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;import javax.servlet.ServletRequestListener;@Configuration
@EnableWebSocket
public class WebSocketConfig implements ServletRequestListener {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}
WebSocket类 通用方法,这里因为大屏项目,没有登入的id,就没有加id验证
package com.example.only.common;import org.springframework.stereotype.Component;import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;@Component
@ServerEndpoint(value = "/webSocket",decoders = { warningDecoder.class }, encoders = { warningEncoder.class })
public class WebSocket {private Session session;private static CopyOnWriteArraySet<WebSocket> webSockets = new                                  CopyOnWriteArraySet<WebSocket>();@OnOpenpublic void onOpen(Session session){this.session = session;webSockets.add(this);System.out.println("连接成功");}@OnClosepublic void onClose(Session session){webSockets.remove(this);System.out.println("连接关闭");}@OnMessagepublic  void message(String message,Session session) {System.out.println("【WebSocket消息】收到客户端发来的消息:{}"+message);}//实现服务器主动推送(业务层不要调用这个方法,调用sendInfo)public void sendMseeage(Object object) throws IOException, EncodeException {System.out.println(object.toString())this.session.getBasicRemote().sendObject(object);}//群发(或者单发)自定义消息,最终调用的方法public void sendInfo(Object object) throws Exception{for (WebSocket webSocket:webSockets) {webSocket.sendMseeage(object);}}
}

warningDecoder 解码器类

package com.example.only.common;import com.alibaba.fastjson.JSON;import javax.websocket.DecodeException;
import javax.websocket.EndpointConfig;public class warningDecoder implements javax.websocket.Decoder.Text<Object> {
/** 解码类* * */@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void init(EndpointConfig arg0) {// TODO Auto-generated method stub}@Overridepublic Object decode(String string) throws DecodeException {return     JSON.parseObject(string, Object.class);}@Overridepublic boolean willDecode(String arg0) {return true;}}

warningEncoder编码器类

package com.example.only.common;import com.alibaba.fastjson.JSON;import javax.websocket.EncodeException;
import javax.websocket.EndpointConfig;public class warningEncoder implements javax.websocket.Encoder.Text<Object> {
/** 编码器* * */@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void init(EndpointConfig arg0) {// TODO Auto-generated method stub}@Overridepublic String encode(Object obj) throws EncodeException {return JSON.toJSONString(obj);}}

测试类:

@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping(method = {POST, GET}, value = "/admin/test")
public class Test {@Autowiredprivate WebSocket webSocket;@RequestMapping("/send")public void send(@RequestParam(value = "olv")String olv) throws Exception {webSocket.sendInfo(olv);}
}

前端代码:

const initWebSocket = () => {
  var websocket = null;
  if ("WebSocket" in window) {

   // 后端代码的地址+端口号
    websocket = new WebSocket("ws://ip:端口号/webSocket");
  } else {
    alert("该浏览器不支持websocket!");
  }
  websocket.onopen = function (event) {
    console.log("建立连接");
    websocket.send("Hello WebSockets!");
  };
  websocket.onclose = function (event) {
    console.log("连接关闭");
    reconnect(); //尝试重连websocket
  };
  //建立通信后,监听到后端的数据传递
  websocket.onmessage = function (event) {
    console.log(event);
   
  };
  websocket.onerror = function () {
    // notify.warn("websocket通信发生错误!");
    // initWebSocket()
  };
  window.onbeforeunload = function () {
    websocket.close();
  };
};
// 重连
const reconnect = () => {
  console.log("正在重连");
  // 进行重连
  setTimeout(function () {
    initWebSocket();
  }, 1000);
};

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

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

相关文章

jeecg-boot安装

我看大家都挺关注&#xff0c;所以集中上传了下代码和相关工具&#xff0c;方便大家快速完成 链接&#xff1a;https://pan.baidu.com/s/1-Y9yHVZ-4DQFDjPBWUk4-A 提取码&#xff1a;op1r 1. 下载代码 下载地址 : JEECG官方网站 - 基于BPM的低代码开发平台(低代码平台_零代…

C# 窗体应用程序 Chart控件显示实时曲线

IDE: VS2019 项目模板&#xff1a;C# windows 窗体应用(.NET Framework) 【参考】 B站上教程C#Chart控件画折线图的使用&#xff0c;关于Chart控件的属性&#xff0c;介绍得非常详细。B站上教程C#上位机Chart控件实时曲线终极讲解&#xff0c;对鼠标滚轮事件等&#xff0c;多个…

冯诺依曼结构理解

冯诺依曼结构 存储器&#xff1a;内存 数据是要在计算机的体系结构中进行流动的&#xff0c;在流动过程中对数据加工处理 从一个设备到另一个设备&#xff0c;本质是一种拷贝 CPU的计算速度是很快的&#xff0c;所以数据设备间的拷贝效率&#xff0c;决定了计算机整体的基本效率…

常见Spring相关工具报错-源码分析

常见Spring相关工具报错-源码分析 1. Resouce Bundle 国际化 yml 配置不生效 1. Resouce Bundle 国际化 yml 配置不生效 1️⃣ 配置yml 2️⃣ 报错信息 2024-04-15 15:13:57.828 [http-nio-8090-exec-1] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - [doResolveHan…

Python数据挖掘项目开发实战:使用朴素贝叶斯进行社会媒体挖掘

注意&#xff1a;本文下载的资源&#xff0c;与以下文章的思路有相同点&#xff0c;也有不同点&#xff0c;最终目标只是让读者从多维度去熟练掌握本知识点。 Python数据挖掘项目开发实战&#xff1a;使用朴素贝叶斯进行社会媒体挖掘 一、项目背景与目标 在社交媒体时代&…

Spring Boot | SpringBoot对 “SpringMVC“的 “整合支持“、SpringMVC“功能拓展实现“

目录: SpringMVC 的 “整合支持” ( 引入"Web依赖启动器"&#xff0c;几乎可以在无任何额外的配置的情况下进行"Web开发")1.SpringMVC "自动配置" 介绍 ( 引入Web依赖启动器"后&#xff0c;SpringBoot会自动进行一些“自动配置”&#xff0…

51单片机-LED模块

文章目录 1.点亮一个LED灯2.LED闪烁3.LED流水灯 1.点亮一个LED灯 #include <REGX52.H> void main() {P20xFE; //1111 1110while(1){} }2.LED闪烁 增加延时&#xff0c;控制LED的亮灭间隙 延时函数的添加依靠STC-ISP软件的延时函数功能代码自动生成&#xff0c;如图 #i…

Linux 使用C语言来加载和卸载内核模块

文章目录 一、insmod/rmmod1.1 insmod1.2 rmmod 二、C语言示例2.1 syscall2.2 dmeo 一、insmod/rmmod 1.1 insmod Linux 使用insmod来加载内核模块&#xff1a; NAMEinsmod - Simple program to insert a module into the Linux Kernel使用strace来追踪其过程&#xff1a; …

React中useEffect与useLayoutEffect有什么区别?

React中useEffect与useLayoutEffect有什么区别&#xff1f; 1. useEffect2. useLayoutEffect3. useEffect与useLayoutEffect的区别3.1 何时使用useLayoutEffect&#xff1f; 在React中&#xff0c;useEffect和useLayoutEffect都是用来处理副作用的Hook&#xff0c;例如数据获取…

童话里都是骗人的,靠可视化大屏升职加薪,除非老板脑子秀逗了。

可视化大屏有没有价值&#xff0c;肯定是有的&#xff0c;靠着可视化大屏升职加薪靠谱吗&#xff1f;不靠谱。 童话故事中的情节和元素往往是夸张和不现实的&#xff0c;不能完全应用于现实生活中。在现实世界中&#xff0c;升职加薪通常需要通过实际的工作表现、专业技能的提…

数据库练习(一)

完成以下SQL语句的编写&#xff1a; student表: score 表&#xff1a; 查询student表的所有记录 Select * from student; 查询student表的第2条到4条记录 select * from student LIMIT 1,3; 从student表查询所有学生的学号&#xff08;id&#xff09;、姓名&#xff08;n…

Java虚拟机——内存的分配详解

内存区域划分 对于大多数的程序员来说&#xff0c;Java 内存比较流行的说法便是堆和栈&#xff0c;这其实是非常粗略的一种划分&#xff0c;这种划分的“堆”对应内存模型的 Java 堆&#xff0c;“栈”是指虚拟机栈&#xff0c;然而 Java 内存模型远比这更复杂&#xff0c;想深…

react结合Redux实现全局状态管理

React与Redux结合使用&#xff0c;可以为React应用提供集中式的状态管理和复杂的业务逻辑处理能力。以下是React中使用Redux的基本步骤和关键概念&#xff1a; 安装所需库 确保已经安装了React和ReactDOM。然后安装Redux及其配套库&#xff1a; npm install redux react-redu…

基于云端部署,支持超大规模会议的召开,同时实现就近接入的功能

随着信息技术的飞速发展&#xff0c;云视频产品已成为企业沟通协作的重要工具。中国联通作为通信行业的领军企业&#xff0c;其云视频产品凭借多项技术优势&#xff0c;在市场中脱颖而出&#xff0c;成为众多企业的首选。 中国联通的云视频产品采用了先进的互联网高清技术&…

【计算机毕业设计】游戏售卖网站——后附源码

&#x1f389;**欢迎来到琛哥的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 琛哥&#xff0c;一名来自世界500强的资深程序猿&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 琛哥在深度学习任务中展现出卓越的能力&a…

数据结构和算法(哈希表和图(A*算法精讲))

一 、哈希表 1.1 哈希表原理精讲 哈希表-散列表&#xff0c;它是基于快速存取的角度设计的&#xff0c;也是一种典型的“空间换时间”的做法 键(key)&#xff1a; 组员的编号如&#xff0c;1、5、19。。。 值(value)&#xff1a; 组员的其它信息&#xff08;包含性别、年龄和…

Python-VBA函数之旅-divmod函数

目录 1、divmod函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、相关文章&#xff1a; 个人主页&#xff1a;非风V非雨-CSDN博客 divmod函数在Python中具有广泛的应用场景&#xff0c;特别是在需要同时处理除法的商和余数的情况下。常见的应用场景有&a…

《系统架构设计师教程(第2版)》第9章-软件可靠性基础知识-04-软件可靠性设计

文章目录 1. 容错设计技术1.1 恢复块设计1.2 N版本程序设计1.3 冗余设计 2. 检错技术3. 降低复杂度设计4. 系统配置中的容错技术4.1 双机热备技术4.1.1 双机热备模式4.1.2 双机互备模式4.1.3 双机双工 4.2 服务器集群技术 1. 容错设计技术 1.1 恢复块设计 恢复块设计 选择一组…

Maven:<dependencyManagement>:依赖集中管理

dependencyManagement Maven &#xff1c;dependencyManagement&#xff1e;&#xff0c;请介绍一下 在Apache Maven构建工具中&#xff0c;<dependencyManagement> 是一个非常重要的元素&#xff0c;用于在一个项目或一组项目的顶级POM&#xff08;Project Object Model…

TCP/IP协议—TCP

TCP/IP协议—TCP TCP协议TCP通信特点TCP技术概念TCP定时器 TCP头部报文TCP连接三次握手&#xff08;建立连接&#xff09;四次挥手&#xff08;释放连接&#xff09;连接状态 TCP协议 传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种…