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

  • 企业快速发展下,品牌营销要从重塑客户体验做起(企业快速发展下一步工作)

    企业快速发展下,品牌营销要从重塑客户体验做起(企业快速发展下一步工作)

  • u盘杀毒工具哪个最好(u盘杀毒工具)(u盘杀毒盘)

    u盘杀毒工具哪个最好(u盘杀毒工具)(u盘杀毒盘)

  • 剪映导出的视频保存在哪里(剪映导出的视频太大怎么办)

    剪映导出的视频保存在哪里(剪映导出的视频太大怎么办)

  • ios15如何提取图片文字(ios15图片提取)

    ios15如何提取图片文字(ios15图片提取)

  • 荣耀30pro是什么屏幕(荣耀30pro是什么指纹解锁)

    荣耀30pro是什么屏幕(荣耀30pro是什么指纹解锁)

  • 专门感染word文件的计算机病毒叫做(主要感染word文档的病毒是什么)

    专门感染word文件的计算机病毒叫做(主要感染word文档的病毒是什么)

  • 全民k歌的道具值几分(全民k歌的道具是怎么来的)

    全民k歌的道具值几分(全民k歌的道具是怎么来的)

  • 怎么把图片弄成压缩文件(怎么把图片弄成圆图)

    怎么把图片弄成压缩文件(怎么把图片弄成圆图)

  • chm-tl00h是什么型号手机(chm一tl00)

    chm-tl00h是什么型号手机(chm一tl00)

  • 抖音不感兴趣别人会知道吗(抖音不感兴趣别人还能刷到你吗)

    抖音不感兴趣别人会知道吗(抖音不感兴趣别人还能刷到你吗)

  • 怎么删qq自动回复内容(怎样删除qq自动回复)

    怎么删qq自动回复内容(怎样删除qq自动回复)

  • 华为p30来电不显示号码(华为p30来电不显示无法接电话咋回事)

    华为p30来电不显示号码(华为p30来电不显示无法接电话咋回事)

  • 网易云音乐安装失败(网易云音乐安装后打不开)

    网易云音乐安装失败(网易云音乐安装后打不开)

  • 小米note4上市时间(小米note4最新)

    小米note4上市时间(小米note4最新)

  • 笔记本内存和台式机内存能通用吗(笔记本内存和台式机一样吗)

    笔记本内存和台式机内存能通用吗(笔记本内存和台式机一样吗)

  • 2k显示器看1080p电影会模糊吗(2k显示器看1080p电影有提升吗)

    2k显示器看1080p电影会模糊吗(2k显示器看1080p电影有提升吗)

  • 数码摄像机的工作原理是(数码摄像机的工作原理图)

    数码摄像机的工作原理是(数码摄像机的工作原理图)

  • 微信邀请链接什么时候过期(微信8.0邀请链接)

    微信邀请链接什么时候过期(微信8.0邀请链接)

  • vivo手机怎么把字体调大(vivo手机怎么把旧手机的东西导入新手机)

    vivo手机怎么把字体调大(vivo手机怎么把旧手机的东西导入新手机)

  • vivoiqooneo多少w快充(iqooneo最高支持多少w的快充)

    vivoiqooneo多少w快充(iqooneo最高支持多少w的快充)

  • 拼多多怎么取消投诉(拼多多怎么取消银行卡绑定)

    拼多多怎么取消投诉(拼多多怎么取消银行卡绑定)

  • iPhone怎么同一个ID不推送(苹果手机同一个)

    iPhone怎么同一个ID不推送(苹果手机同一个)

  • oppoa83有红外线吗(oppoa83有红外线功能吗)

    oppoa83有红外线吗(oppoa83有红外线功能吗)

  • ChatGPT等大模型的模型量化:平滑量化法

    ChatGPT等大模型的模型量化:平滑量化法

  • 缴纳印花税的会计凭证
  • 未认证待抵扣进项税重分类
  • 往来账款怎么做
  • 自来水厂的供水管是什么材质的
  • 股票分红会冲抵成本吗
  • 坏账计提坏账准备
  • 小型微利企业认定标准2023年
  • 商场做促销
  • 印花税缴款了发现报错了怎么办?
  • 有外经证的计税收入怎么算?
  • 三证合一 更新
  • 财务费用手续费有哪些
  • 不动产发票怎么填写
  • 未开发票收入交增值税怎么做账?
  • 劳务费增值税发票是劳务单位开吗
  • 农产品所得税扣除比例
  • 图书发票没有明细能报销吗?
  • 个人所得税工资薪金税率表
  • 企业间拆借应收利息记哪个科目?
  • 简易计税开票开成了一般计税的税率会比对不通过吗
  • 滴滴开的发票能否抵扣进项税
  • 增值税红字发票是什么意思
  • 建设单位管理费费率
  • 已认证的进项税额转出怎么做账务处理
  • 公司全额承担个税会计分录
  • 在windows 10中
  • ntfs磁盘压缩
  • win都是10 怎么办
  • 承兑汇票公对公多久到账
  • 物权请求权如何行使
  • 公司卖二手车的流程
  • 如何免费获得microsoft
  • 公司转让使用过的汽车要交哪些税费
  • 支付挂靠方的管理费用有进项吗?
  • 其他货币资金明细账填写样本
  • phpswoole面试
  • 预缴企业所得税分录
  • pdo_mysql
  • 员工购买住房公积金申请
  • win7界面旋转
  • iis制作网页
  • PHP中empty,isset,is_null用法和区别
  • vuedraggable官方文档
  • 季报的利润表本月金额填的是当月数可以吗
  • ChatGPT及相关产品体验与研究
  • 其他收益和其他收入的区别
  • iscan扫描仪使用方法
  • df -th命令
  • 银行贷款入账需要什么
  • 现金盘盈盘亏怎么处理
  • 发票没有填写开户行,可以报销吗
  • wind安装
  • 电子税务局怎么注册
  • 环保税计税依据怎么算
  • 安装SQL2005的实训体会
  • 支付增值税税控系统技术维护费用
  • 无资产可执行啥意思
  • 中级会计报名必须用电脑吗
  • 跨年的进项税额转出要补交税款吗
  • 新成立的公司能干吗
  • 公司增资的法条
  • 租房期间损坏应赔偿多少
  • 房地产预售款预交税金计算
  • centos怎么设置
  • tcp window 0
  • 怎么用U盘装系统
  • 电脑安装了安卓系统没用
  • window7qq登录失败
  • xp简单实用的网络连接
  • ngwatch.exe
  • 移动硬盘做win7系统盘
  • Python中文分词的第三方库
  • vue watch form
  • linux命令sed的用法
  • nodejs模块有哪些
  • python排序算法比较
  • js如何使用
  • jQuery给div,Span, a ,button, radio 赋值与取值
  • rst.open
  • 税控盘口令密码怎么修改
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设