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

  • jef-an00是什么型号(jef-an00是什么型号多少钱灵魂摆渡)

    jef-an00是什么型号(jef-an00是什么型号多少钱灵魂摆渡)

  • 微信视频对方忙线中是怎么回事(微信视频对方忙线是在干嘛)

    微信视频对方忙线中是怎么回事(微信视频对方忙线是在干嘛)

  • 苹果x黑屏苹果图标闪(iphone x 黑屏没反应)

    苹果x黑屏苹果图标闪(iphone x 黑屏没反应)

  • 3d打印文件格式(3d打印文件的格式)

    3d打印文件格式(3d打印文件的格式)

  • 钉钉换手机登录管理员能看到么(钉钉换手机登录聊天记录还在吗)

    钉钉换手机登录管理员能看到么(钉钉换手机登录聊天记录还在吗)

  • beamforming开启和关闭什么意思(beamforming开启还是关闭好)

    beamforming开启和关闭什么意思(beamforming开启还是关闭好)

  • 苹果xr屏幕黑屏转圈怎么回事(苹果xr屏幕黑屏怎么办)

    苹果xr屏幕黑屏转圈怎么回事(苹果xr屏幕黑屏怎么办)

  • 笔记本电脑开机显示自动修复怎么办(笔记本电脑开机黑屏)

    笔记本电脑开机显示自动修复怎么办(笔记本电脑开机黑屏)

  • 卡1打电话卡2不能上网(卡1打电话时卡2为什么不能开流量)

    卡1打电话卡2不能上网(卡1打电话时卡2为什么不能开流量)

  • 互感器s2不接地可以吗(三相四线电表接互感器)

    互感器s2不接地可以吗(三相四线电表接互感器)

  • 苹果11打字反应迟钝(苹果11打字反应慢,打字快一点还会出现漏字)

    苹果11打字反应迟钝(苹果11打字反应慢,打字快一点还会出现漏字)

  • 一加7支持多少快充(一加7支持多少w)

    一加7支持多少快充(一加7支持多少w)

  • 蓝牙耳机降噪什么意思(蓝牙耳机降噪什么技术)

    蓝牙耳机降噪什么意思(蓝牙耳机降噪什么技术)

  • 腾讯视频pc端怎么截屏(腾讯视频pc端怎么看登陆设备)

    腾讯视频pc端怎么截屏(腾讯视频pc端怎么看登陆设备)

  • 苹果11如何设置24小时显示(苹果11如何设置26键拼音)

    苹果11如何设置24小时显示(苹果11如何设置26键拼音)

  • 苹果存储其他怎么删(iphone 存储 其它)

    苹果存储其他怎么删(iphone 存储 其它)

  • 华为手机亮度怎么调整(华为手机亮度怎么固定不变)

    华为手机亮度怎么调整(华为手机亮度怎么固定不变)

  • 蚂蚁森林记录怎么删除(蚂蚁森林记录保存多久)

    蚂蚁森林记录怎么删除(蚂蚁森林记录保存多久)

  • 计算机中组织和存储信息的基本单位(计算机组织和管理的基本单位)

    计算机中组织和存储信息的基本单位(计算机组织和管理的基本单位)

  • 华为p30使用技巧(华为p30使用教程)

    华为p30使用技巧(华为p30使用教程)

  • 滴滴历史地址怎么删除(滴滴历史地址怎么查询)

    滴滴历史地址怎么删除(滴滴历史地址怎么查询)

  • 10的9次方怎么打出来(10的9次方怎么打出来手机)

    10的9次方怎么打出来(10的9次方怎么打出来手机)

  • vivoy97otg功能在哪

    vivoy97otg功能在哪

  • word插入自动换行符(word自动换行在哪里设置)

    word插入自动换行符(word自动换行在哪里设置)

  • 手机wps的页边距在哪里(手机wps页边距怎么弄)

    手机wps的页边距在哪里(手机wps页边距怎么弄)

  • 微信小站是什么软件(微信小站怎么赚钱)

    微信小站是什么软件(微信小站怎么赚钱)

  • 最近参与的超话隐藏(如何关闭最近参与的超话)

    最近参与的超话隐藏(如何关闭最近参与的超话)

  • 【web前端学习】7个ES6解构技巧让代码更简洁(web前端基础教程)

    【web前端学习】7个ES6解构技巧让代码更简洁(web前端基础教程)

  • 计提生产应税产品的分录
  • 100万劳务费发票多少税
  • 营业收入包括投资净收益吗
  • 一般纳税人符合条件
  • 小规模纳税人建筑服务税率是多少
  • 应计利息会计分录处理
  • 进口增值税发票图片
  • 公司账户拨款工具有哪些
  • 个人所得税生育险
  • 境外演艺经纪公司代扣代缴哪些税款?
  • 年底没有取得发票企业所得税
  • 利税总额含企业所得税吗
  • 以前固定资产入账折旧怎么提
  • 一般纳税人开普票税率是3%还是13%
  • 应收账款一般按实际发生额入账
  • 代扣代缴手续费要交增值税吗
  • 出纳人员赔偿
  • 研发费用税前加计扣除
  • 最新w10系统专业版
  • win10闹钟设置方法
  • 设置ahci模式后,开不了机
  • php文件流
  • win10 ltsc版
  • 分公司收到总公司拨款怎么做分录
  • 被辞退有补助金吗
  • 赠与房屋再次出售税费
  • ElementPlus DateTimePicker日期时间选择器限制可选时间范围(精确时分秒)
  • flex的几个常用布局
  • 自然人股东是
  • 猴子摘桃玩法
  • PHP如何使用资源路由方式改进新闻管理
  • 图文详解水的画法
  • php判断是否连接数据库
  • windows2022下载
  • PyTorch 深度学习实战 | 基于生成式对抗网络生成动漫人物
  • userpasswords
  • 电子承兑汇票到期提示付款后多久到账
  • 股东股权转让是什么意思
  • 现金销售商品的会计分录
  • 进口商品销售的会计分录
  • 预付账款的适用范围
  • php static function
  • rabbitmq如何解决消息堆积问题
  • phpcms任意文件上传
  • 坏账的计算公式
  • 固定收益票据
  • 进项票和销项票是什么意思
  • 固定资产投资额是指什么
  • 提供学历教育服务取得收入免征增值税的有
  • 母子公司合并报表案例
  • 利润表中的所得税费用包括哪些
  • 实际成本法如何核算
  • 公司给员工买意外险需要员工出钱吗
  • 公司房租发票是法人名字能入账吗安全吗
  • 高速公路过路费怎么算的
  • 收到工程进度款怎么做分录
  • 普通进项发票怎么做分录
  • 主播收钱违法吗
  • 年底暂估收入,年初怎么做
  • 抵扣认证的发票怎么做账
  • 什么情况下增值税发票不能抵扣
  • 分页式存储管理代码
  • mysql理论知识
  • sql将查询的结果拼接
  • eac.exe是什么
  • 怎么卸载电脑上的迅雷软件
  • win7取消ch
  • 怎么彻底关闭windows更新
  • centos8 systemd
  • linux系统的安装配置
  • Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
  • 安卓骰子游戏
  • unity ui控件
  • jquery和angularjs的区别
  • python文件与目录操作
  • javascript命名规范
  • 话费的发票可以做费用吗
  • 专票最高几个点
  • 用实际行动践行中国税务精神
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设