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

  • 浏览器cookie要不要打开(浏览器cookie是缓存吗)

    浏览器cookie要不要打开(浏览器cookie是缓存吗)

  • 苹果13mini怎么连拍(苹果13mini怎么连接耳机)

    苹果13mini怎么连拍(苹果13mini怎么连接耳机)

  • 华为p40pro蓝牙支持aptx的吗(华为p40pro蓝牙支持什么编码)

    华为p40pro蓝牙支持aptx的吗(华为p40pro蓝牙支持什么编码)

  • 淘宝会员名是什么呢(淘宝会员名是什么格式)

    淘宝会员名是什么呢(淘宝会员名是什么格式)

  • 什么是fd(什么是FDA认证)

    什么是fd(什么是FDA认证)

  • 苹果手机下载软件显示装机量不足(苹果手机下载软件)

    苹果手机下载软件显示装机量不足(苹果手机下载软件)

  • 抖音收入要不要交税

    抖音收入要不要交税

  • 怎么设置微信可以在电脑上登录(怎么设置微信可见天数)

    怎么设置微信可以在电脑上登录(怎么设置微信可见天数)

  • qq天气怎么设置城市(qq天气怎么设置在桌面)

    qq天气怎么设置城市(qq天气怎么设置在桌面)

  • 快手如何设置不允许下载视频(快手如何设置不让他看)

    快手如何设置不允许下载视频(快手如何设置不让他看)

  • 佳能加墨水后提示无墨(佳能加完墨水还显示墨水不足)

    佳能加墨水后提示无墨(佳能加完墨水还显示墨水不足)

  • 抖音聚焦为什么不清晰(抖音 聚焦)

    抖音聚焦为什么不清晰(抖音 聚焦)

  • win7电脑运行很慢(win7电脑运行慢)

    win7电脑运行很慢(win7电脑运行慢)

  • 抖音压缩画质怎么办(抖音压缩画质怎么弄)

    抖音压缩画质怎么办(抖音压缩画质怎么弄)

  • 戴尔笔记本一键还原是哪个键(戴尔笔记本一键恢复出厂设置)

    戴尔笔记本一键还原是哪个键(戴尔笔记本一键恢复出厂设置)

  • macbook显示电池没有在充电怎么办(macbook显示电池维修)

    macbook显示电池没有在充电怎么办(macbook显示电池维修)

  • md128cha是什么版本(md18211)

    md128cha是什么版本(md18211)

  • 微信怎么发闪照(微信怎么发闪照给好友)

    微信怎么发闪照(微信怎么发闪照给好友)

  • ipad2197是什么型号(苹果ipad型号2197)

    ipad2197是什么型号(苹果ipad型号2197)

  • 平板可以插内存卡吗(平板可以插内存卡下载歌曲吗)

    平板可以插内存卡吗(平板可以插内存卡下载歌曲吗)

  • 商务通怎么进入(商务通怎么用)

    商务通怎么进入(商务通怎么用)

  • iphonex是不是2k屏幕(苹果x是2.5d屏幕吗)

    iphonex是不是2k屏幕(苹果x是2.5d屏幕吗)

  • 手机系统缓存怎么清理(手机系统缓存怎么设置)

    手机系统缓存怎么清理(手机系统缓存怎么设置)

  • 手机首选网络怎么更改(手机首选网络怎么取消)

    手机首选网络怎么更改(手机首选网络怎么取消)

  • 显示器屏幕大小(显示器屏幕大小调整)

    显示器屏幕大小(显示器屏幕大小调整)

  • 笔记本电脑除号怎么打(笔记本电脑除号怎么打按哪个键盘呢)

    笔记本电脑除号怎么打(笔记本电脑除号怎么打按哪个键盘呢)

  • win10终止代码memory(win10终止代码clockwatchdogtimeout)

    win10终止代码memory(win10终止代码clockwatchdogtimeout)

  • 快手里的黄钻是干嘛的(快手里的黄钻是真的吗)

    快手里的黄钻是干嘛的(快手里的黄钻是真的吗)

  • 华为不支持网易云音乐吗(华为不支持网易大神登录)

    华为不支持网易云音乐吗(华为不支持网易大神登录)

  • 4g加什么意思(4g加号是什么意思)

    4g加什么意思(4g加号是什么意思)

  • 账面价值大于计税基础
  • 应交税费转结哪里去
  • 增值税发票的品名与报关单不一致
  • 小规模未达起征点销售额是多少
  • 小规模纳税人申请一般纳税人流程
  • 增值税优惠政策中即征即退和先征后退有什么区别?
  • 物业前期开办物资
  • 公允价值变动计入其他综合收益
  • 筹办期的工资费用是什么
  • 销售边角料计入什么科目
  • 固定资产出租的收入计入什么科目
  • 期初余额什么时候在借方什么时候在贷方
  • 包装材料报废后如何做会计核算?
  • 自产自销免税物品包括哪些
  • 税务局加强企业所得税管理
  • 发行债券到期一次还本付息和按月付息哪个发行价格低
  • 收到样品费计入什么科目
  • 新建账套应收账款怎么填客户
  • 小规模纳税人变成一般纳税人的条件
  • 税收分类编码里的劳务是劳务派遣的意思吗
  • 查询税务信用评级
  • 研发支出期末需结转吗
  • 长期借款费用资本化
  • 进项构成比例是啥
  • 财务科目明细表格模板
  • 存货发出记账成本最高
  • 公司之间银行往来款怎么做账
  • 长期待摊费用发生当月摊还是次月摊
  • vmware运行win10很卡怎么解决
  • 政府补助计量的基础是
  • PHP:Memcached::deleteMultiByKey()的用法_Memcached类
  • 弃置费用的会计核算
  • mmc.exe是什么进程
  • 潘塔纳尔湿地位于巴拉圭盆地
  • PHP自定义函数返回两个数中大的那个
  • 应收账款与预收账款重分类表怎么做
  • 原材料入账价值包括代垫运费吗
  • b站怎么进抖音模式
  • 确认收入与结转成本会计分录怎么写
  • 账面价值账面余额摊余成本
  • 固定资产如何分类?
  • 公司购买电脑怎么做会计分录
  • c++operator详解
  • 非货币性资产交换以公允价值为基础进行计量
  • 出口关税的计算公式
  • 保税区商品可以开发票吗
  • 职工意外伤害险赔偿标准
  • 长期股权投资与其他权益工具投资的区别
  • 事业单位结余是什么意思
  • 失业人员的养老金
  • 什么是无形资产包括哪些
  • 报销餐费属于什么费用
  • 企业什么时候才需要交税
  • 发票项目名称可以自定义吗
  • 投资性房地产摊销从什么时候开始
  • 待摊费用属于流动负债吗
  • 图文详解管道支架制作安装标准
  • mysql drop database删除数据库命令实例讲解
  • sqlserver如何查询表数据
  • ubuntu系统如何安装qq
  • 操作系统安装日期查看
  • centos查看目录空间大小
  • [图文教程]Win10家庭版怎么快速升级到win10专业版?
  • Win10预览版桌面图标和任务栏不翼而飞怎么办?
  • Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
  • 基于是什么意思
  • nodejs的理解
  • jquery上下移动
  • 使用node
  • java script入门
  • javascript面向对象吗
  • 安卓两个app
  • python魔法方法有啥用
  • js类的定义方法
  • python读取文件的操作方法
  • 开采砂石
  • 公益性公墓免交税吗
  • 消费税组成计税价格为什么要除以1-消费税率
  • 广东省电子税务局app下载手机版
  • 2022年太原医保缴费时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设