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

  • 电脑下载爱奇艺怎么下载(电脑下载爱奇艺没有图标)

    电脑下载爱奇艺怎么下载(电脑下载爱奇艺没有图标)

  • 支付宝推送的消息在哪里查看(支付宝推送的消息在哪里关闭)

    支付宝推送的消息在哪里查看(支付宝推送的消息在哪里关闭)

  • 怎么保存快手视频(怎么保存快手视频无水印)

    怎么保存快手视频(怎么保存快手视频无水印)

  • 抖音加配乐就没有原声了(抖音加配乐就没有声音了)

    抖音加配乐就没有原声了(抖音加配乐就没有声音了)

  • 苹果账单待处理是什么意思(苹果账单待处理怎么取消)

    苹果账单待处理是什么意思(苹果账单待处理怎么取消)

  • mxf文件用什么播放器(mxf是什么文件格式)

    mxf文件用什么播放器(mxf是什么文件格式)

  • 怎么关闭指纹解锁功能(怎么关闭指纹解锁功能华为手机)

    怎么关闭指纹解锁功能(怎么关闭指纹解锁功能华为手机)

  • 华为nova7有双系统吗(华为nova7双系统怎么用)

    华为nova7有双系统吗(华为nova7双系统怎么用)

  • word怎么设置自动编号(word怎么设置自动更新的编号)

    word怎么设置自动编号(word怎么设置自动更新的编号)

  • 华为matepro5g可以用吗(华为matepro5g参数)

    华为matepro5g可以用吗(华为matepro5g参数)

  • qq空间被挡访客是什么意思(qq空间被挡访客同一个人记录几次)

    qq空间被挡访客是什么意思(qq空间被挡访客同一个人记录几次)

  • 华为手机nova6上市时间(华为手机nova6上面有个圆圈)

    华为手机nova6上市时间(华为手机nova6上面有个圆圈)

  • 手机怎么录歌(手机怎么录歌曲)

    手机怎么录歌(手机怎么录歌曲)

  • 抖音怎么把两个视频合拍(抖音怎么把两个视频放在一左一右)

    抖音怎么把两个视频合拍(抖音怎么把两个视频放在一左一右)

  • 苹果xr铃声怎么设置教程(苹果xr铃声怎么调大小)

    苹果xr铃声怎么设置教程(苹果xr铃声怎么调大小)

  • 抖音访问别人会有记录吗(抖音访问别人会留下访问记录吗)

    抖音访问别人会有记录吗(抖音访问别人会留下访问记录吗)

  • 如何用excel制表(如何用excel制表制作制衣牛仔裤的仓库表)

    如何用excel制表(如何用excel制表制作制衣牛仔裤的仓库表)

  • 快手口令红包怎么抢(快手口令红包怎么抢视频)

    快手口令红包怎么抢(快手口令红包怎么抢视频)

  • 华为手机状态栏在哪里(华为手机状态栏拉不下来怎么办)

    华为手机状态栏在哪里(华为手机状态栏拉不下来怎么办)

  • mc.exe - mc是什么进程文件 有什么作用(mcshield.exe是什么进程)

    mc.exe - mc是什么进程文件 有什么作用(mcshield.exe是什么进程)

  • findfont: Font family [‘Times New Roman‘] not found. Falling back to DejaVu Sans.

    findfont: Font family [‘Times New Roman‘] not found. Falling back to DejaVu Sans.

  • groupmems命令  管理用户主要组群的成员(groupdel命令详解)

    groupmems命令 管理用户主要组群的成员(groupdel命令详解)

  • 已缴纳车船税的车船在同一年度
  • 发票收款人和复核没写可以用吗
  • 退回以前年度费用怎么做帐
  • 增值税专用发票抵扣税额是什么意思
  • 开咨询费需要合同吗
  • 个体户申报重复申报怎么办
  • 物流公司主营业务范围
  • 写字楼租金税率
  • 境外签署合同的效力
  • 支付个人无发票怎么入账
  • 股权转让所得交所得税吗
  • 长期借款会计科目编码
  • 购买资产佣金应该怎么算
  • 建筑公司支付给个人的劳务费计入什么科目
  • 在建工程完工结转
  • 国有企业取得的土地收储款是否要上缴财政
  • 现金管理规定有哪些主要内容
  • 合并报表时抵消内部交易包含的未实现损益的影响有哪些
  • 年终红包怎么入账
  • 年底结账时利息收入怎么做处理?
  • 佣金支付方式有哪几种
  • 车辆增值税抵扣到什么时候结束
  • 开进来的发票冲红怎么处理?
  • 增值税预交款怎么算
  • 一般纳税人企业要交哪些税
  • 交防伪税控技术怎么交
  • 累计已确认收入极可能不会发生重大转回
  • 有限合伙企业需要承担无限连带责任吗
  • 存货的核算心得体会
  • 购销行为是什么
  • 供应商质量问题通知函范文
  • 资产处置损益计入利润吗
  • 个人与公司交易超过20万
  • 应付股利属于什么科目
  • 分配结转本月发出材料成本会计分录
  • 广告公司的工程师好做吗
  • 如何计算业务招标价格
  • 免征个人所得税33种情形
  • 罂粟的花季
  • 单位和个人交付的区别
  • 金融企业计提贷款利率
  • 赫尔辛基哈加赫利亚大学
  • 控制系统动力学
  • 不能抵扣的福利发票要勾选吗为什么
  • 预付账款年底怎样结转
  • 车间主要有哪些事故风险
  • 计提增值税怎么计提
  • 财政零余额账户存款
  • 免税农产品发票怎么抵扣申报
  • 固定资产报废处置的请示
  • mysql的日期时间函数
  • 公司收到生育津贴不给员工
  • 买下土地
  • 政府预算会计要素包括
  • 房地产毛利额纳税调整
  • 员工入股会计分录
  • 个人垫付社保会计分录
  • 客户从公司借钱怎么拒绝
  • 今年成立的公司需要申报残疾人保障金吗
  • 资产季末值
  • 成本类科目借贷规则
  • 合法有效的凭证是什么
  • 通过MySQL优化Discuz!的热帖翻页的技巧
  • Mysql 1864 主从错误解决方法
  • SQL语句查询数据库账号和权限
  • 开启win7
  • win xp 添加网络打印机
  • Win7系统不小心将TCP/IP协议卸载如何重新安装?
  • Win10 Mobile 10586.63截图曝光:或为正式推送版本
  • win10生物识别
  • webpack 主题切换
  • 音乐播放音乐
  • shell脚本题
  • 局域网远程开机与远程唤醒
  • node.js中的http.response.end方法使用说明
  • 命令最常用的类型有
  • 运用python编写程序
  • 深圳国税局官网登录
  • 出口退税申报时闿
  • 月收入不足1000
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设