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

  • ipadpro第五代是哪一年的(ipadpro第五代是最新款吗)

    ipadpro第五代是哪一年的(ipadpro第五代是最新款吗)

  • 苹果图标怎么下移固定(苹果图标怎么下沉)

    苹果图标怎么下移固定(苹果图标怎么下沉)

  • 抖音可以通过手机号搜索吗(抖音可以通过手机号加人吗)

    抖音可以通过手机号搜索吗(抖音可以通过手机号加人吗)

  • 手机侧面开缝了怎么办(手机侧面开缝了怎么处理)

    手机侧面开缝了怎么办(手机侧面开缝了怎么处理)

  • opporeno3来电闪光灯怎么设置(opporeno3来电闪光灯怎么打开)

    opporeno3来电闪光灯怎么设置(opporeno3来电闪光灯怎么打开)

  • 什么主要用来将不同类型的网络连接起来(什么主要用来将不同的网络连接起来)

    什么主要用来将不同类型的网络连接起来(什么主要用来将不同的网络连接起来)

  • itunesu中国能用吗(国内的itunes为什么不能用)

    itunesu中国能用吗(国内的itunes为什么不能用)

  • 领取红包记录几个字怎么删(领取红包记录几天能查到)

    领取红包记录几个字怎么删(领取红包记录几天能查到)

  • 抖音分享到微信受限制怎么办(抖音分享到微信好友)

    抖音分享到微信受限制怎么办(抖音分享到微信好友)

  • 面对面红包怎么查记录(面对面红包怎么发)

    面对面红包怎么查记录(面对面红包怎么发)

  • 手机电池鼓包了还能用吗(手机电池鼓包了还能充电吗)

    手机电池鼓包了还能用吗(手机电池鼓包了还能充电吗)

  • 优酷电脑客户端为什么那么卡(优酷电脑客户端drm加密)

    优酷电脑客户端为什么那么卡(优酷电脑客户端drm加密)

  • qq等级怎么看多少级(qq怎么样看等级)

    qq等级怎么看多少级(qq怎么样看等级)

  • 多媒体创作系统大致可分为(多媒体创作系统包括)

    多媒体创作系统大致可分为(多媒体创作系统包括)

  • qq通讯录发消息能看到吗(qq通讯录发消息能收到吗)

    qq通讯录发消息能看到吗(qq通讯录发消息能收到吗)

  • 如何改变图片尺寸大小(如何改变图片尺寸和分辨率)

    如何改变图片尺寸大小(如何改变图片尺寸和分辨率)

  • vivoz5后盖是玻璃还是塑料(vivoz5手机后盖是什么材质)

    vivoz5后盖是玻璃还是塑料(vivoz5手机后盖是什么材质)

  • 为什么最近苹果手机信号和网速都特别慢(为什么最近苹果手机总是没信号)

    为什么最近苹果手机信号和网速都特别慢(为什么最近苹果手机总是没信号)

  • 华为手环怎么打电话(华为手环怎么打开)

    华为手环怎么打电话(华为手环怎么打开)

  • 抖音移除粉丝对方有提示吗(抖音移除粉丝对方还能发私信吗)

    抖音移除粉丝对方有提示吗(抖音移除粉丝对方还能发私信吗)

  • word表格无法拖动(word表格无法拖动调整)

    word表格无法拖动(word表格无法拖动调整)

  • 小米8指纹设置不见了(小米8指纹设置不见了怎么办)

    小米8指纹设置不见了(小米8指纹设置不见了怎么办)

  • vivos1是什么时候上市的(vivos1是哪年出的手机)

    vivos1是什么时候上市的(vivos1是哪年出的手机)

  • Vector底层实现(vector 底层原理)

    Vector底层实现(vector 底层原理)

  • 二手房交易税费2023新规定
  • 什么是应付职工薪酬设定提存计划
  • 计提坏账后又收回怎么做
  • 付款后发票可以抵扣吗
  • 卷式发票是什么样的
  • 成本税率计算公式
  • 金税盘显示已到锁死期,未到汇总期是什么原因
  • 第一次购买税控盘
  • 软件销售利润
  • 分公司亏损是否也分摊所得税
  • 在建工程当中哪些是资产
  • 注册资本金印花税什么时候缴纳
  • 加工承揽合同印花税谁交
  • 雇主责任险可以税前扣除吗
  • 关税减免有哪些类型?
  • 季度不超30万需计提增值税吗
  • 拿到购房发票
  • 大专生可以考公务员职位列表
  • 研发费用发票怎么入账
  • 公司内部领用库存商品
  • 汇缴交的所得税如何做账
  • 当月已认证的可抵扣增值税
  • win10 bios设置
  • wd discovery怎么安装
  • mac怎么airdrop给ipad
  • 税控盘进项税已抵扣如何转出分录
  • appservice是什么意思
  • 增值税征税范围中的货物包括
  • CodeIgniter与PHP5.6的兼容问题
  • php cgi
  • 老板垫付的员工怎么入账
  • 发票开具时限是怎么规定的
  • php二维码解码
  • 前端如何调用后端方法
  • 琥珀山庄位于我国哪个省
  • consul框架
  • vue实战开发项目视频
  • windows pythonpath
  • 税控盘登录密码设置
  • 网上学电脑的软件
  • python文档怎么查看
  • LVS负载均衡群集的常用调度算法包含哪几种?
  • 总账和明细账期间相同吗
  • 二手车的范围
  • 税务登记后要马上报税吗
  • sql 附加数据库
  • mysql数据库简单介绍
  • 换出长期股权投资的会计处理
  • 企业的经营业务
  • 个人缴纳公积金的方法
  • 清算期间的坏账会计分录
  • 企业收到的政府部门工作经费
  • 转账支付水电费
  • 收到返还工会经费账务处理
  • 查账征收与核定征收在哪里看
  • 收到实收资本的现金流
  • 用友有审核权限审核不了
  • 公司的钱借给个人需要交什么税
  • 非营利医疗机构是什么单位
  • windows8crazy error
  • 戴尔电脑u盘快速启动
  • Win10预览版怎么变回正式版
  • debian yum安装
  • dos下运行安装文件
  • pps是什么文件
  • 微软雅黑啥意思
  • windows显示缩略图
  • xp系统电源设置在哪里
  • centos7 zsh
  • win10周年版
  • win7系统更新怎么关闭
  • win8怎么设置
  • Windows10系统下iis没有注册.netFrameWork4.0的原因
  • javascript的几种数据类型
  • mapper--图片热点区域高亮组件官方站点
  • ajax链式调用
  • 改革开放四十年是几几年
  • 什么是解放思想?请阐述解放思想和实事求是之间的关系
  • 贵州电子税务总局
  • 税务申报如何网上申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设