webSocket + springboot+vue3用法

embedded/2024/12/23 5:27:32/

领导安排个任务,大屏显示数据,要与后台数据一致,所以用到了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.ppmy.cn/embedded/1768.html

相关文章

数据库-Redis(17)

目录 81.什么是Redis Cluster&#xff1f; 82.说说Redis哈希槽的概念&#xff1f;为什么是16384个&#xff1f; 83.Redis集群会有写操作丢失吗&#xff1f;为什么&#xff1f; 84.Redis客户端有哪些&#xff1f; 85.Redis如何做大数据量插入&#xff1f; 81.什么是Redis C…

Unity - ScrollView被内部的IDragHandler等接口对象阻挡滑动问题

原因&#xff1a;滑动冲突&#xff0c;内部的Image会阻挡Input 解决办法&#xff1a; 在内部的onDrag、onBeginDrag、onEndDrag内主动调用 GameObject.Find("Scroll View").GetComponent<ScrollRect>().OnBeginDrag(eventData); GameObject.Find("Scr…

linux安装jdk

yum安装jdk 在linux上使用yum安装是非常粗暴无脑的&#xff0c;但仍然有需要注意的点&#xff0c;不然会掉坑里。这里说一下步骤。 1.1. 执行命令yum list |grep jdk查看可安装jdk版本 1.2. 选择一个java版本进行安装 这里我们希望安装java1.8&#xff0c;因为我们的机器是64位…

go语言操作 PostgreSQL 数据库

1. Go 的 PostgreSQL 驱动程序 使用go get命令来安装 go get github.com/lib/pqPostgreSQL 数据库凭据&#xff1a;确保要连接的 PostgreSQL 数据库的地址、端口、用户名和密码 2. 导入必要的包 首先&#xff0c;在 Go 代码中导入所需的包&#xff0c;包括 PostgreSQL 驱动…

Unity Pro 2019 for Mac:专业级游戏引擎,助力创意无限延伸!

Unity Pro 2019是一款功能强大的游戏开发引擎&#xff0c;其特点主要体现在以下几个方面&#xff1a; 强大的渲染技术&#xff1a;Unity Pro 2019采用了新的渲染技术&#xff0c;包括脚本化渲染流水线&#xff0c;能够轻松自定义渲染管线&#xff0c;通过C#代码和材料材质&…

MLOps

参考&#xff1a; 什么是MLOps&#xff1f;与DevOps有何异同&#xff1f;有什么价值&#xff1f;https://baijiahao.baidu.com/s?id1765071998288593530&wfrspider&forpcMLOps简介_AI开发平台ModelArts_WorkflowMLOps(Machine Learning Operation)是机器学习&#xf…

品牌百度百科词条创建多少钱?

百度百科作为国内最具权威和影响力的知识型平台&#xff0c;吸引了无数品牌和企业争相入驻。一个品牌的百度百科词条&#xff0c;不仅是对品牌形象的一种提升&#xff0c;更是增加品牌曝光度、提高品牌知名度的重要途径。品牌百度百科词条创建多少钱&#xff0c;这成为了许多企…

Ubuntu22.04.4 - 安装后使用笔记目录-VMware

安装的话就傻瓜式盲点&#xff0c;根据自己需求进行处理&#xff0c;我是在ssh的地方勾选了一下选项&#xff0c;其他都是默认项&#xff0c;官网上有文档&#xff0c;就不赘述了 一、登录用户管理 二、系统命令 三、vim 四、网络配置 五、apt 六、SSH 七、MySQL8