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

  • css网页设计作业与模板网站相比,定制化网站仍然是当前网站市场的主流需求

    css网页设计作业与模板网站相比,定制化网站仍然是当前网站市场的主流需求

  • 怎么在抖音群里发自己的名片(怎么在抖音群里踢人)

    怎么在抖音群里发自己的名片(怎么在抖音群里踢人)

  • 微信怎么弄成小窗口回复(微信怎么弄成小窗口回复信息)

    微信怎么弄成小窗口回复(微信怎么弄成小窗口回复信息)

  • 微信旁边有个耳朵是啥模式(微信旁边有个耳机)

    微信旁边有个耳朵是啥模式(微信旁边有个耳机)

  • 荣耀20最高支持多少w快充(荣耀20最高支持刷新率)

    荣耀20最高支持多少w快充(荣耀20最高支持刷新率)

  • 抖音上面直播电视剧可以吗(抖音上面直播电影会存在版权怎么办)

    抖音上面直播电视剧可以吗(抖音上面直播电影会存在版权怎么办)

  • 酷狗豪华vip和音乐包有什么区别(酷狗豪华VIP和音乐包开哪个)

    酷狗豪华vip和音乐包有什么区别(酷狗豪华VIP和音乐包开哪个)

  • 拼多多帮砍不了怎么办(拼多多为什么帮砍不了)

    拼多多帮砍不了怎么办(拼多多为什么帮砍不了)

  • 两个手机怎么用闪传(两个手机怎么用蓝牙传东西)

    两个手机怎么用闪传(两个手机怎么用蓝牙传东西)

  • 有锁机和无锁机的区别(什么是苹果有锁机和无锁机)

    有锁机和无锁机的区别(什么是苹果有锁机和无锁机)

  • qq怎样把聊天记录发给别人(qq怎样把聊天记录打印出来)

    qq怎样把聊天记录发给别人(qq怎样把聊天记录打印出来)

  • sdd硬盘是什么(sdd sata)

    sdd硬盘是什么(sdd sata)

  • 在excel中工作簿是指(在excel中工作簿存盘时默认的文件扩展名是)

    在excel中工作簿是指(在excel中工作簿存盘时默认的文件扩展名是)

  • 高通msm8490八核是什么处理器

    高通msm8490八核是什么处理器

  • 手机爱奇艺怎么调画面比例(手机爱奇艺怎么退出登录)

    手机爱奇艺怎么调画面比例(手机爱奇艺怎么退出登录)

  • 蓝牙耳机能不能分开用(蓝牙耳机能不能充一晚上)

    蓝牙耳机能不能分开用(蓝牙耳机能不能充一晚上)

  • 抖音里抢镜怎么转不了(抖音抢镜怎么调整大小)

    抖音里抢镜怎么转不了(抖音抢镜怎么调整大小)

  • 电脑微信怎么视频不了(电脑微信怎么视频录制)

    电脑微信怎么视频不了(电脑微信怎么视频录制)

  • 菜鸟裹裹关联是双方能看到吗(菜鸟裹裹关联是相互的吗)

    菜鸟裹裹关联是双方能看到吗(菜鸟裹裹关联是相互的吗)

  • 微信跑分什么意思

    微信跑分什么意思

  • 抖音粉丝按什么排序(抖音粉丝什么时候更新)

    抖音粉丝按什么排序(抖音粉丝什么时候更新)

  • TCP网络编程有什么特点(tcpip网络编程)

    TCP网络编程有什么特点(tcpip网络编程)

  • 水印相机没法录像吗(水印相机没法录音怎么办)

    水印相机没法录像吗(水印相机没法录音怎么办)

  • 如何申请腾讯大王卡(如何申请腾讯大王卡19元)

    如何申请腾讯大王卡(如何申请腾讯大王卡19元)

  • xr第二个卡槽在哪(xr第二个卡槽在哪里打开)

    xr第二个卡槽在哪(xr第二个卡槽在哪里打开)

  • mac怎么彻底删除搜狗输入法? Mac系统卸载搜狗输入法的两种方法(mac怎么彻底删除一个软件)

    mac怎么彻底删除搜狗输入法? Mac系统卸载搜狗输入法的两种方法(mac怎么彻底删除一个软件)

  • 企业所得税的纳税人有哪些简答题
  • 已开票未确认收入怎么填写纳税申报表
  • 小规模免收增值税的收入范围
  • 进项税大于销项税需要交附加税吗
  • 增值税专用发票可以开电子发票吗
  • 装订需要多长时间
  • 房产税的原值是如何确定的
  • 开办费计入管理费用后是否要转出
  • 资产负债表的日期可以是1月1日吗
  • 应收账款让售账务处理
  • 企业所得税该如何计算
  • 所得税汇算清缴时间期限
  • 固定资产期初余额在哪里录入
  • 企业重组中撤资所得税有哪些处理规则?
  • 文化事业建设税怎么申报
  • 一般纳税人预缴税款几个点
  • 团队建设费用怎么入账
  • 自制半成品生产成本
  • 模具是可以长期待摊吗
  • 小规模餐饮企业增值税申报表填写
  • 固定资产进项税额转出怎么做账务处理
  • php 无限级分类
  • php支付功能
  • word无法创建工作环境
  • 排污费应计入什么会计科
  • php类和对象
  • win7旗舰版叫啥
  • CI(Codeigniter)的Setting增强配置类实例
  • 小规模纳税人进项可以抵扣吗
  • vue3中props
  • 以前年度损益调整会计分录
  • 无形资产属于哪一类
  • php图片库
  • AI - stable-diffusion(AI绘画)的搭建与使用
  • laravel 实例
  • 命令行查看硬件信息
  • linux用mv文件移动指定文件
  • 时间格式转换成小时数
  • 印花税的花贴在哪里
  • 员工工资为零只缴纳社保,个税怎么处理
  • wp留言板插件
  • 更改增值税申报表退税在哪里退钱
  • 土地利息可以作为土增扣除吗
  • 2023小型微利企业税收优惠
  • 金税四期注意什么
  • 差额征税指的是什么税种
  • 金蝶软件中怎么让以前年度损益调整在利润表中取不到数
  • 建安工程预缴税额怎么算
  • 在建工程借款利息计入哪里
  • 支付广告费属于进项还是销项
  • 预收账款和应收账款可以放在一个账户
  • 房地产开发企业土地增值税怎么计算
  • 动态sql语句怎么写
  • mac设置多个桌面
  • win10系统崩溃后可以通过什么来恢复
  • win10预览版21390
  • win7系统不能修改
  • 笔记本隐藏功能
  • macbook如何安装windows
  • gnaupdaemon.exe是什么
  • incorrect email format, please re-enter.
  • win8开始界面如何设置成win7
  • 编写一个定时间隔为5ms的子程序
  • win8的ie浏览器
  • linux chakan
  • js中创建函数的方法
  • js常用的设计模式
  • 使用Jasmine和Karma对AngularJS页面程序进行测试
  • Android: Receiving Data from the Send Intent,将自己的app注册系统分享
  • node+express+ejs制作简单页面上手指南
  • bat xcopy copy
  • pythonlist排序算法
  • onSaveInstanceState和onRestoreInstanceState触发的时机
  • javascript总结笔记
  • 手把手教你打造班级主题环境 培训后心得
  • 买房送地下室土地可以吗
  • 最新印花税税目内容
  • 辽宁房产税2021年新规定来了,自2021年1月28日起执行
  • 瑞典交税
  • 辽宁省耕地占用税适用税额表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设