位置: 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模块)

  • 美团审核未通过怎么办(美团审核未通过查询原因)

    美团审核未通过怎么办(美团审核未通过查询原因)

  • 华为畅聊通话有什么用(华为畅聊通话有通话记录吗)

    华为畅聊通话有什么用(华为畅聊通话有通话记录吗)

  • wifi欠费是什么状态(wifi欠费是什么意思)

    wifi欠费是什么状态(wifi欠费是什么意思)

  • miui12稳定版内测什么时候出来(miui12稳定版内测申请成功后怎么更新)

    miui12稳定版内测什么时候出来(miui12稳定版内测申请成功后怎么更新)

  • se2多大屏幕尺寸(苹果se2多少寸屏幕尺寸)

    se2多大屏幕尺寸(苹果se2多少寸屏幕尺寸)

  • 滴滴早上几点能接单(滴滴早上几点能叫车)

    滴滴早上几点能接单(滴滴早上几点能叫车)

  • ipadair3是什么系统(ipadair3是a几)

    ipadair3是什么系统(ipadair3是a几)

  • java集合类型有哪些(java集合有哪几种)

    java集合类型有哪些(java集合有哪几种)

  • 下载的文件打不开怎么回事(下载的文件打不开乱码)

    下载的文件打不开怎么回事(下载的文件打不开乱码)

  • b站搬运没有收益吗(b站搬运的视频)

    b站搬运没有收益吗(b站搬运的视频)

  • 电脑转屏怎么转换快捷(电脑转屏了怎么恢复)

    电脑转屏怎么转换快捷(电脑转屏了怎么恢复)

  • 显示器重影是什么原因(显示器重影模糊是什么原因)

    显示器重影是什么原因(显示器重影模糊是什么原因)

  • 手机上出现hd收费吗(手机上出现hd收费怎么办)

    手机上出现hd收费吗(手机上出现hd收费怎么办)

  • vivo手电筒快捷键(vivo手电筒快捷键打不开)

    vivo手电筒快捷键(vivo手电筒快捷键打不开)

  • 魅族隐私模式怎么关闭(魅族隐私模式怎么找不到了)

    魅族隐私模式怎么关闭(魅族隐私模式怎么找不到了)

  • 手机主板发烫怎么回事(手机主板发烫怎么维修)

    手机主板发烫怎么回事(手机主板发烫怎么维修)

  • 小米5闪光灯怎么设置(小米闪光灯怎么关闭)

    小米5闪光灯怎么设置(小米闪光灯怎么关闭)

  • 怎么卸载小爱同学软件(怎么卸载小爱同学接电话)

    怎么卸载小爱同学软件(怎么卸载小爱同学接电话)

  • 华为微信美颜怎么开(华为微信美颜怎么开美颜相机)

    华为微信美颜怎么开(华为微信美颜怎么开美颜相机)

  • 此值与此单元格定义的数据验证限制不匹配(此值与此单元格数据验证限制不匹配)

    此值与此单元格定义的数据验证限制不匹配(此值与此单元格数据验证限制不匹配)

  • Linux中chkconfig命令打开或关闭系统服务的使用教程(linux chcon命令)

    Linux中chkconfig命令打开或关闭系统服务的使用教程(linux chcon命令)

  • 使用小程序制作一个电子木鱼,功德+1(小程序制作平台)

    使用小程序制作一个电子木鱼,功德+1(小程序制作平台)

  • 猿创征文|前端之行,任重道远(来自大三学长的万字自述)(猿创设计科技有限公司)

    猿创征文|前端之行,任重道远(来自大三学长的万字自述)(猿创设计科技有限公司)

  • 租集体土地建厂合法吗
  • 已抵扣的进项税发票怎么查询明细
  • 个人独资企业税种有哪些
  • 累进税率的形式有全额累进税率和什么两种
  • 完工产品成本计入什么科目
  • 固定资产开专票怎么记凭证
  • 装载机折旧年限是几年
  • 国外客户付款方式
  • 委托代征税务
  • 销售发票红冲会计分录怎么做?
  • 固定资产超过注册资金怎么处理
  • 银行发行理财产品的条件
  • 转账户有误退回会计处理
  • 房屋租赁税务局开票税点
  • 合并报表的编制主体
  • 高新创投企业所得税税率
  • 企业所得税应纳税额的计算公式
  • deepin阻止关机
  • 预付账款属于资产类
  • 材料没有入库
  • 苹果电脑怎么快速
  • 联想随身充评测
  • 私车公用维修费属于个人承担吗
  • PHP:pcntl_signal_dispatch()的用法_PCNTL函数
  • 交易性金融资产的交易费用计入哪里
  • 处置工程物资取得净收益
  • 所得税分配表分录怎么写
  • 增值税纳税申报表在哪里打印
  • 机器学习报错解决2——ValueError: too many values to unpack (expected 3)
  • 学生个人网站制作html代码
  • 固定资产提前报废
  • 税款入库期是什么意思
  • opencv1.0
  • MVC架构模式
  • 累计折旧累计摊销属于现金流吗
  • 未达起征点怎么填申报表
  • 汇算清缴需要做账吗
  • 公司缴个人所得税吗
  • 个体工商户建账办法最新
  • 员工工资为零只缴纳社保,个税怎么处理
  • 会计科目设置怎么操作
  • python生成器的应用场景
  • wordpress站点地址如何设置
  • mac安装步骤
  • SQL Server 2016的数据库对象有那些?
  • discuz管理中心登陆
  • 财务报表中的净资产在哪里
  • 可以采用
  • sql2005使用
  • 利息收入为负数的原因
  • 别人公司过账用自己的银行卡会查吗
  • 小规模纳税人和一般纳税人的界定标准
  • 会计账簿有哪些作用
  • 建设银行e信通介绍
  • 银行收费错误当天能退吗
  • 长期股权投资收益会计处理
  • 小规模年末怎么做账
  • 劳务公司开出发票没有收到钱,怎么做成本
  • 发票抬头公司报销的该怎么写
  • 安装2个win10系统
  • centos直接安装
  • freebsd 安装
  • 重装系统后win7无法连接到网络
  • 笔记本win7win10双系统怎么装
  • win7隐藏账户
  • win10快速隐藏窗口
  • 怎么放大linux字体
  • SDK不兼容Ubuntu64位系统的解决办法!!!
  • Android带有注册界面的简单app
  • javascript基础笔记
  • u3d地形编辑贴图
  • javascript怎么学
  • android数据存储与访问的方式有
  • python else用法
  • 广东国家电子税务全电发票
  • 广东省电子税务局app下载官网
  • 四川办税大厅
  • 国家税务总局公告2017年第21号
  • 深圳龙华区税务局大浪税务所电话
  • 季度财务会计报告怎么写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设