位置: IT常识 - 正文

websocket前后端数据实时更新(前端+后端)(websocket前端vue)

编辑:rootadmin
做的项目中需要将后端提供的数据展示在前端页面,一开始我是用JS的setInterval()方法,设置一个时间,每过时间发起一次ajax请求。虽然也能凑活着实现,但总感觉数据不是实时刷新的,而且还占用资源,所以学习WebSocke,并总结了一下,以下是本人总结的前后端WebSocke相关代码: 一、后 ...

推荐整理分享websocket前后端数据实时更新(前端+后端)(websocket前端vue),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:websocket向前端发送数据,websocket向前端发送数据,websocket接口后端怎么调用,websocket 前后端,websocket前端和后端,websocket前后端分离项目,websocket前后端分离项目,websocket 前后端,内容如对您有帮助,希望把文章链接给更多的朋友!

做的项目中需要将后端提供的数据展示在前端页面,一开始我是用JS的setInterval()方法,设置一个时间,每过时间发起一次ajax请求。虽然也能凑活着实现,但总感觉数据不是实时刷新的,而且还占用资源,所以学习WebSocke,并总结了一下,以下是本人总结的前后端WebSocke相关代码:

一、后端:

1.pom.xml添加WebSocke依赖

<!-- SpringBoot Websocket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>websocket前后端数据实时更新(前端+后端)(websocket前端vue)

2.WebSocke配置类

@Configurationpublic class WebSocketConfig {/*** 这个bean的注册,用于扫描带有@ServerEndpoint的注解成为websocket ,如果你使用外置的tomcat就不需要该配置文件*/@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}

3.WebSocke服务类

@ServerEndpoint(value = "/webSocket")//主要是将目前的类定义成一个websocket服务器端, 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端@Component@EnableScheduling// cron定时任务@Datapublic class WebSocket {private static final Logger logger = LoggerFactory.getLogger(WebSocket.class);/*** 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。*/private static int onlineCount = 0;/*** concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。*/private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>();/*** 与某个客户端的连接会话,需要通过它来给客户端发送数据*/private Session session;public static CopyOnWriteArraySet<WebSocket> getWebSocketSet() {return webSocketSet;}public static void setWebSocketSet(CopyOnWriteArraySet<WebSocket> webSocketSet) {WebSocket.webSocketSet = webSocketSet;}/*** 从数据库查询相关数据信息,可以根据实际业务场景进行修改*/@Resourceprivate IndexService indexService;private static IndexService indexServiceMapper;@PostConstructpublic void init() {WebSocket.indexServiceMapper = this.indexService;}/*** 连接建立成功调用的方法** @param session 会话*/@OnOpenpublic void onOpen(Session session) throws Exception {this.session = session;webSocketSet.add(this);//查询当前在线人数int nowOnline = indexServiceMapper.nowOnline();this.sendMessage(JSON.toJSONString(nowOnline));}/*** 收到客户端消息后调用的方法** @param message 客户端发送过来的消息*/@OnMessagepublic void onMessage(String message, Session session) throws IOException {logger.info("参数信息:{}", message);//群发消息for (WebSocket item : webSocketSet) {try {item.sendMessage(JSON.toJSONString(message));} catch (IOException e) {e.printStackTrace();}}}/*** 连接关闭调用的方法*/@OnClosepublic void onClose() {webSocketSet.remove(this);if (session != null) {try {session.close();} catch (IOException e) {e.printStackTrace();}}}/*** 发生错误时调用** @param session 会话* @param error 错误信息*/@OnErrorpublic void onError(Session session, Throwable error) {logger.error("连接异常!");error.printStackTrace();}/*** 发送信息** @param message 消息*/public void sendMessage(String message) throws IOException {this.session.getBasicRemote().sendText(message);}/*** 自定义消息推送、可群发、单发** @param message 消息*/public static void sendInfo(String message) throws IOException {logger.info("信息:{}", message);for (WebSocket item : webSocketSet) {item.sendMessage(message);}}}

4.定时任务(为了给前端实时推送数据,我这里写了个定时任务,定时任务我用的是cron表达式,不懂的同学可以上这个网址学习:cron表达式)

@Slf4j@Componentpublic class IndexScheduled {@Autowiredprivate IndexMapper indexMapper;/*** 每3秒执行一次*///@Scheduled(cron = "0/3 * * * * ? ") //我这里暂时不需要运行这条定时任务,所以将注解注释了,朋友们运行时记得放开注释啊public void nowOnline() {System.err.println("********* 首页定时任务执行 **************");CopyOnWriteArraySet<WebSocket> webSocketSet = WebSocket.getWebSocketSet();int nowOnline = indexMapper.nowOnline();webSocketSet.forEach(c -> {try {c.sendMessage(JSON.toJSONString(nowOnline));} catch (IOException e) {e.printStackTrace();}});System.err.println("/n 首页定时任务完成.......");}}

二、前端:

前端的代码非常的简单,直接上代码。

<body class="gray-bg"><div class="online"><span class="online">测试在线人数:<span id="online"></span>&nbsp人</span></div><script th:inline="javascript">let websocket = null;let host = document.location.host;//判断当前浏览器是否支持WebSocketif ('WebSocket' in window) {//连接WebSocket节点websocket = new WebSocket("ws://" + host + "/webSocket");} else {alert('浏览器不支持webSocket');}//连接发生错误的回调方法websocket.onerror = function () {setMessageInnerHTML("error");};//连接成功建立的回调方法websocket.onopen = function (event) {setMessageInnerHTML("open");};//接收到消息的回调方法websocket.onmessage = function (event) {let data = event.data;console.log("后端传递的数据:" + data);//将后端传递的数据渲染至页面$("#online").html(data);};//连接关闭的回调方法websocket.onclose = function () {setMessageInnerHTML("close");};//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。window.onbeforeunload = function () {websocket.close();};//将消息显示在网页上function setMessageInnerHTML(innerHTML) {};//关闭连接function closeWebSocket() {websocket.close();};//发送消息function send() {let message = document.getElementById('text').value;websocket.send(message);};</script></body>
本文链接地址:https://www.jiuchutong.com/zhishi/303205.html 转载请保留说明!

上一篇:js数组如何理解(js中的数组)

下一篇:phpcms v9 537报错(phpcms模块)

  • 微信消息怎么隐藏内容(微信消息怎么隐藏时间)

    微信消息怎么隐藏内容(微信消息怎么隐藏时间)

  • 华为nova5i时间怎么调24小时(华为nova5pro时间)

    华为nova5i时间怎么调24小时(华为nova5pro时间)

  • 索尼黑卡5与黑卡6对比(索尼黑卡5与黑卡3区别)

    索尼黑卡5与黑卡6对比(索尼黑卡5与黑卡3区别)

  • 抖音购物订单取消不了怎么办(抖音订单的钱怎么提现)

    抖音购物订单取消不了怎么办(抖音订单的钱怎么提现)

  • 快手怎么打开原声播放(快手怎么打开原色彩)

    快手怎么打开原声播放(快手怎么打开原色彩)

  • 入会开启扬声器是什么意思(入会开启扬声器有必要开吗)

    入会开启扬声器是什么意思(入会开启扬声器有必要开吗)

  • 微信按日期怎么查与谁聊天(微信怎么选择日期)

    微信按日期怎么查与谁聊天(微信怎么选择日期)

  • 手机qq头像为什么突然变成企鹅了(手机qq头像为什么显示不出来)

    手机qq头像为什么突然变成企鹅了(手机qq头像为什么显示不出来)

  • 隔空投送 无法发现对方(隔空投送无法共享 准备共享时出错)

    隔空投送 无法发现对方(隔空投送无法共享 准备共享时出错)

  • 荣耀v10上市时间(荣耀v10上市时间2018年6)

    荣耀v10上市时间(荣耀v10上市时间2018年6)

  • 5g流量用的快吗(5g流量使用快吗)

    5g流量用的快吗(5g流量使用快吗)

  • 9100核显相当于什么独显(9100的核显相当于)

    9100核显相当于什么独显(9100的核显相当于)

  • 华为允许流量下载怎么设置(华为允许流量下载怎么关)

    华为允许流量下载怎么设置(华为允许流量下载怎么关)

  • 华硕360和365区别(华硕460和365)

    华硕360和365区别(华硕460和365)

  • oppox5是双卡双待么(oppox5是双卡双待吗)

    oppox5是双卡双待么(oppox5是双卡双待吗)

  • word怎么取消兼容模式(word2003怎么取消兼容模式)

    word怎么取消兼容模式(word2003怎么取消兼容模式)

  • ap log设置什么意思(aplogosize)

    ap log设置什么意思(aplogosize)

  • ios白包是什么意思啊(app白包是什么)

    ios白包是什么意思啊(app白包是什么)

  • 美图mp1713是什么型号(美图mp1709是什么手机)

    美图mp1713是什么型号(美图mp1709是什么手机)

  • 美版ipad和国版有什么区别(美版ipad和国行区别)

    美版ipad和国版有什么区别(美版ipad和国行区别)

  • 阿里巴巴服务器在哪里(阿里巴巴服务器在水里泡着嘛)

    阿里巴巴服务器在哪里(阿里巴巴服务器在水里泡着嘛)

  • reno电池容量(oppo reno电池容量多少)

    reno电池容量(oppo reno电池容量多少)

  • 华为sne一al00是什么型号(华为sen-al00是什么型号)

    华为sne一al00是什么型号(华为sen-al00是什么型号)

  • 苹果x屏幕漏液修复方法(苹果x漏液换屏多少钱)

    苹果x屏幕漏液修复方法(苹果x漏液换屏多少钱)

  • Umi4 从零开始实现动态路由、动态菜单(umi ts)

    Umi4 从零开始实现动态路由、动态菜单(umi ts)

  • 向境外企业支付利息代扣代缴
  • 运输发票税率是9
  • 缴纳税收凭证有原件吗
  • 净营业周期和营业周期
  • 单利率和复利率excel计算公式
  • 工伤事故赔偿项目表
  • 个体工商户出租商铺个人所得税
  • 缴纳个人所得税扣除项目
  • 活动现金红包
  • 补上年所得税加滞纳金入哪个科目?
  • 金蝶软件开发服务费入什么科目?
  • 税收滞纳金算不算营业利润
  • 税控系统抄报税
  • 财务报表中应收账款包括什么
  • 税务申报没报上怎么办
  • 建筑业工人工资保障
  • 提供有形动产租赁服务的增值税税率是
  • centos 6.5安装教程
  • 商标注册费相关法律法规
  • win10我无法更改某些设置
  • linux命令有啥用
  • 广告公司的设计师多少钱一月
  • 怎么u盘装系统,u盘装系统教程图解
  • 应付股利的会计分录T
  • 企业所得税汇算清缴扣除标准2023
  • 销售点的增值税计算公式
  • 高新技术企业研发费用占比要求
  • 人脸清晰化神器软件
  • php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
  • 冲回上年计提费用
  • 数据 挖掘
  • 餐饮费是业务招待费还是差旅费
  • css5个定位
  • tmux复制粘贴
  • 高新企业的所得税
  • 残疾基金出什么科目
  • 应收账款属于哪个会计要素
  • 住宿费记入管理费用还是营业费
  • c++32个关键字详解
  • 常用的收集数据方法有
  • 报销宽带费属于什么费用
  • sqlserver无法打开备份设备
  • 一般纳税人交增值税的账务处理
  • 权责发生制根据产品的生产特点和管理要求结转成本
  • 买车挂公司名下的坏处
  • 银行承兑汇票包括支票吗
  • 小规模红冲发票怎么做分录
  • 医院收到卫生局拨款会计分录
  • 自产自销免税农产品需要缴纳印花税吗
  • 银行涉外收入申报单
  • 食堂没发票如何记账
  • sql server数据库中的null(空值)
  • MySQL数据库同时查询更新同一张表的方法
  • 如何解决cpu超频问题
  • WIN10开启高性能模式
  • win10怎么自定义壁纸
  • ubuntu和windows哪个流畅
  • 如何在苹果电脑上下载软件
  • SonicStageMonitoring.exe是什么进程 有什么作用
  • ctl.start
  • 电脑显示器无信号键盘灯不亮
  • xp怎么改w7
  • win7定时静音
  • 可用分区az
  • 判断div滑动到底怎么操作
  • jqueryfind
  • perl hex
  • js如何引用
  • 搭建nodejs
  • jquery中的事件
  • 简单的智能家居
  • python并发原理
  • js怎么修改
  • Python中列表元素可通过什么访问
  • 税务协查函回复的内容有哪些
  • 哈尔滨二手房交易流程
  • 小规模增值税减免会计科目
  • 安徽省国家税务局网上办税平台
  • 衰竭期矿山开采的矿产品减征幅度
  • 市中区税务局办税大厅地址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设