vue使用websocket与springboot通信

news2024/11/24 19:21:37

WebSocket是HTML5下一种新的协议,它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的

在很多项目中,都要用到websocket,使得前端页面与后端页进行实时通信,例如,实时查询订单状态、设备状态实时显示到页面。本博文,分为前端页面代码和后端页面代码,在最后有源代码下载链接。前端使用用vue技术,后端使用springboot

一、后端代码
1、websocket代码
@Slf4j
@Component
@ServerEndpoint(value = "/websocket/order")
public class WebsocketProvider {

    /**
     * 连接事件,加入注解
     * @param session
     */
    @OnOpen
    public void onOpen(Session session) {
        String orderId = WebsocketUtil.getParam(WebsocketUtil.sessionKey, session);
        log.info("Websocket连接已打开,当前orderId为:"+orderId);
        // 添加到session的映射关系中
        WebsocketUtil.addSession(orderId, session);
        //测试发送消息
        WebsocketUtil.sendMessage(orderId, AjaxResult.success("恭喜,已建立连接"));
    }

    /**
     * 连接事件,加入注解
     * 用户断开链接
     * @param session
     */
    @OnClose
    public void onClose(Session session) {
        String orderId = WebsocketUtil.getParam(WebsocketUtil.sessionKey, session);
        // 删除映射关系
        WebsocketUtil.removeSession(orderId);
    }

    /**
     * 当接收到用户上传的消息
     * @param session
     */
    @OnMessage
    public void onMessage(Session session, String message) {
        log.info("收到Websocket消息:"+message);
    }
    /**
     * 处理用户活连接异常
     * @param session
     * @param throwable
     */
    @OnError
    public void onError(Session session, Throwable throwable) {
        try {
            if (session.isOpen()) {
                session.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        throwable.printStackTrace();
    }
}
2、controller发送代码
@Slf4j
@RestController
@RequestMapping("/send")
@Api(tags = "SendController", description = "发送管理")
public class SendController {
    /**
     * 相关信息
     *
     */
    @GetMapping
    public String getPayType(String data) {
        WebsocketUtil.sendMessage("123456", AjaxResult.success(data));
        return "发送成功";
    }
}
3、后端向前端发送消息代码
/**
     * 根据用户ID发送消息
     *
     * @param result
     */
    public static void sendMessage(String sessionId, AjaxResult result) {
        sendMessage(sessionId, JSON.toJSONString(result));
    }

    /**
     * 根据用户ID发送消息
     *
     * @param message
     */
    public static void sendMessage(String sessionId, String message) {
        Session session = ONLINE_SESSION.get(sessionId);
        //判断是否存在该用户的session,判断是否还在线
        if (session == null || !session.isOpen()) {
            return;
        }
        sendMessage(session, message);
    }
二、VUE前端代码
1、界面代码
<div style="display: flex;">
			<el-input v-model="sendData" placeholder="请输入要发送的内容"/>
			<el-button type="success" @click="send" style="margin-left: 20px;">发送</el-button>
		</div>
		<div style="margin-top: 25px;margin-bottom: 5px;font-weight: bold;">收到的消息:</div>
		<div v-for="(item,index) in messages">
			<span>{{item}}</span>
		</div>
2、websocket相关代码
        console.log('进入状态监听*******')
		var url = payServerUrl+"?orderId="+orderId;
		//建立webSocket连接
		proxy.websocket = new WebSocket(url);
		//打开webSokcet连接时,回调该函数
		proxy.websocket.onopen = () =>{
			console.log("连接建立");
		} 
		//关闭webSocket连接时,回调该函数
		proxy.websocket.onclose = () =>{
			console.log("连接关闭");
		} 
		//接收信息
		proxy.websocket.onmessage = function (res) {
			var obj = eval('(' + res.data + ')');
			console.log(obj)
			proxy.messages.push(res.data)
		}
三、测试
1、后端服务启动,运行ServerApplication (运行前,maven先下载依赖包)

2、前端服务启动

window,运行cmd命令,进行前端页面文件夹,执行如下命令

(1)1、安装依赖包
npm install
(2)、启动服务
npm run dev

打开页面 :http://localhost:6080/#/index3、前端页向后端发送数据
4、后端向前端页面发送数据

​使用apifox来发发送请求,apifox百度下载即可
GET请求,http://localhost:8080/ck/send,数据为data

4、源代码:

链接:https://pan.baidu.com/s/1YnuBFQBt2O4GIdcs4jO1SA?pwd=8ahq 
提取码:8ahq

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

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

相关文章

SCI论文公式快捷获取

文章目录 前言IEEE论文公式获取Elsevier论文公式获取Springer的论文公式获取Wiley出版社公式获取SAGE出版社论文公式获取Taylor & Francis Group出版社论文公式获取latex源码转矢量公式 前言 相信许多做科研的同学对于文献公式如何提取很是抓狂&#xff0c;尤其是做PPT时&…

HCIP---企业网的三层架构

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 一.园区网 概念&#xff1a; 园区网是指在园区内建立起来的互联网基础设施&#xff0c;包括网络设备、传输网络、网络管理系统等&#xff0c;其目的是为了方便企业和园区管理方在园区内进…

论文浅尝 | 基于对多条思维链的元推理实现智能问答

笔记整理&#xff1a;屠铭尘&#xff0c;浙江大学硕士&#xff0c;研究方向为知识图谱 链接&#xff1a;https://arxiv.org/abs/2304.13007 1. 动机 1.1 Chain of Thought的诞生 尽管大语言模型在许多自然语言处理任务上表现出色&#xff0c;但由于其本质是token by token的类似…

深度学习环境搭建入门环境搭建(pytorch版本)

从Python安装到深度学习环境搭建 1. Anaconda安装 python可以通过官网下载exe&#xff0c;这里提供的是使用anaconda创建多个虚拟 的python环境&#xff0c;使用Anaconda Prompt管理虚拟环境更方便。 官网地址&#xff1a;Free Download|Anaconda 下载到本地后双击此文…

Mall4cloud 微服务商城系统 2.0 发布

导读现在 jdk17 和 spring boot 以及 spring cloud alibaba 2022 的第三方依赖已经趋于成熟&#xff0c;所以 mall4cloud 也一把梭哈做了升级嗷。 本次更新重点&#xff1a; 系统由 jdk8 最低要求升级到 jdk17spring boot 由 2.7.x 升级到 3.1.xjavax 升级到 jakartaspring-cl…

Flink--简介

1、Apache Flink 是一个实时计算的框架和分布式处理引擎&#xff0c;用于在无边界喝有边界数据流上进行有状态的计算&#xff0c;并且能够在常见的集群上运行&#xff0c;并能以内存速度和任意规模进行计算。 有边界数据流&#xff1a;指的是有开始&#xff0c;也有结束&…

CCF ChinaSoft 2023 论坛巡礼 | NASAC青年软件创新奖论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

gdal3.5.0升级及安装cmake

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 本文主要是将gdal旧版本v3.2.1升级到v3.5.0&#xff0c;解决升级过程中的问题。 一、…

智慧社区大屏:连接社区生活的数字桥梁

随着科技的不断发展&#xff0c;智慧社区已经不再只是未来的概念&#xff0c;它已经在我们的眼前悄然崭露头角。智慧社区是一种基于数字技术的社区管理和生活方式&#xff0c;旨在提高社区的安全性、便利性和生活质量。而在这个数字化的社区中&#xff0c;智慧社区大屏起到了连…

竞赛 深度学习疲劳检测 驾驶行为检测 - python opencv cnn

文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习加…

VMware17安装教程

1、双击安装包 2、等待进度条走满 3、点击下一步 4、点击我接受 下一步 5、修改安装目录 添加path路径 下一步 6、取消用户体验设置 下一步 7、点击下一步 8、 点击安装 9、等待进度条走满 10、点击许可证 输入秘钥 11、 点击输入秘钥 12、 点击完成 完成安装 此时已经完成了安…

Nat. Med. | 基于遗传学原发部位未知癌症的分类和治疗反应预测

今天为大家介绍的是来自Alexander Gusev团队的一篇论文。原发部位未知癌症&#xff08;Cancer of unknown primary&#xff0c;CUP&#xff09;是一种无法追溯到其原发部位的癌症&#xff0c;占所有癌症的3-5&#xff05;。CUP缺乏已建立的靶向治疗方法&#xff0c;导致普遍预后…

【C语言】函数的系统化精讲(三)

文章目录 一、递归举例二、递归举例2.1求n的阶乘2.2 顺序打印⼀个整数的每⼀位 三、递归与迭代3.1递归的思考3.2求第n个斐波那契数 总结 一、递归举例 .通过上回&#xff08;【C语言】函数的系统化精讲&#xff08;二&#xff09;&#xff09;我们了解到递归的限制条件&#x…

企业如何落地搭建商业智能BI系统

随着新一代信息化、数字化技术的应用&#xff0c;引发了新一轮的科技革命&#xff0c;现代化社会和数字化的联系越来越紧密&#xff0c;数据也变成继土地、劳动力、资本、技术之后的第五大生产要素&#xff0c;这一切都表明世界已经找准未来方向&#xff0c;前沿科技也与落地并…

Confluence 恢复的时候数据版本问题

如果 Confluence 恢复的时候提示数据库的版本不正确或者有问题。 如下图所示&#xff1a; 只要版本差不太多&#xff0c;你可以通过数据库来自动调整版本信息。 有关 Confluence 安装的数据库表位置在&#xff1a;CONFVERSION 这个表。 把这个表中的数据更新下就可以了。 当…

网络安全深入学习第八课——反向代理(工具:frp)

文章目录 一、实验环境二、实验要求三、开始模拟1、攻击机配置frp文件2、攻击拿下跳板机&#xff0c;并且上传frpc.ini、frpc.exe、frpc_full.ini文件3、把frps.ini、、frps.exe、frps_full.ini文件放到VPS主机上4、VPS机开启frp5、跳板机开启frp6、验证 一、实验环境 攻击机&…

C++:STL第一篇vector

目录 1.vector 的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator (迭代器)的使用 1.2.3 vector空间增长问题 1.2.4 vector的增删改查 1.2.5 vector 迭代器失效问题。&#xff08;重点&#xff09; 2.vector 深度刨析及模拟实…

git增加右键菜单

有次不小心清理系统垃圾&#xff0c;把git右击菜单搞没了&#xff0c;下面是恢复方法 将下面代码存为.reg文件&#xff0c;双击后导出生效&#xff0c;注意&#xff0c;你安装的git必须是默认C盘的&#xff0c;如果换了地方要改下面注册表文件中相关的位置 Windows Registry …

elform-item动态prop

先来看看我这个变态而又复杂的需求&#xff01; 目前自定义表单的前端开发越来越热&#xff0c;开发人员封装好成熟的组件&#xff0c;用户直接拖动生成自己的页面&#xff01;这样的特点就是&#xff1a; 页面中显示的东西&#xff0c;完全是自定义组合的而不是固定的&#…

在 “219.**** 找不到用于监控项 key“agent.hostname“ 的主机接口.

细节 无法添加主机 在 "219.151" 找不到用于监控项 key"agent.hostname" 的主机接口.z 这个时候要改一下 方式&#xff1a;