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

  • 教大家强制删除id账号(教大家强制删除华为id账号)

    教大家强制删除id账号(教大家强制删除华为id账号)

  • 苹果圆球在哪里设置(苹果圆球在哪里调)

    苹果圆球在哪里设置(苹果圆球在哪里调)

  • 华为手机锁屏页面时间怎么设置(华为手机锁屏页面上的时间怎么设置)

    华为手机锁屏页面时间怎么设置(华为手机锁屏页面上的时间怎么设置)

  • 电脑版微信截图快捷键是哪三个(电脑版微信截图快捷键)

    电脑版微信截图快捷键是哪三个(电脑版微信截图快捷键)

  • k30变焦版和标准版有什么区别(变焦版 标准版 k30pro)

    k30变焦版和标准版有什么区别(变焦版 标准版 k30pro)

  • 三星s9黑屏(三星s9黑屏但有反应)

    三星s9黑屏(三星s9黑屏但有反应)

  • 企业账号和个人账号的区别(企业账号和个人账号开通抖店缴纳保证金)

    企业账号和个人账号的区别(企业账号和个人账号开通抖店缴纳保证金)

  • 微信可以不绑手机号吗(微信可以不绑手机号绑邮箱吗)

    微信可以不绑手机号吗(微信可以不绑手机号绑邮箱吗)

  • qq怎么转发别人的说说(qq怎么转发别人的说说到自己的空间)

    qq怎么转发别人的说说(qq怎么转发别人的说说到自己的空间)

  • 苹果手机升级了还能返回原版本吗(苹果手机升级了发烫怎么办)

    苹果手机升级了还能返回原版本吗(苹果手机升级了发烫怎么办)

  • 存储权限是干什么用的(存储权限什么意思)

    存储权限是干什么用的(存储权限什么意思)

  • macbook开机键在哪(macbookpro 开机键)

    macbook开机键在哪(macbookpro 开机键)

  • 局域网的网络软件主要包括什么(局域网的网络软件主要)

    局域网的网络软件主要包括什么(局域网的网络软件主要)

  • 华为p40有没有红外功能(华为p40有没有红外发射功能)

    华为p40有没有红外功能(华为p40有没有红外发射功能)

  • 联想电脑平板模式是啥(联想电脑平板模式)

    联想电脑平板模式是啥(联想电脑平板模式)

  • 苹果手机怎么连接小米音响(苹果手机怎么连不上wifi)

    苹果手机怎么连接小米音响(苹果手机怎么连不上wifi)

  • 御mini遥控器怎么充电(御mini遥控器怎么换电池)

    御mini遥控器怎么充电(御mini遥控器怎么换电池)

  • 打电话为什么显示无法访问移动网络(打电话为什么显示呼叫失败)

    打电话为什么显示无法访问移动网络(打电话为什么显示呼叫失败)

  • b365主板装win10影响性能吗(b365主板装win7完美解决方案)

    b365主板装win10影响性能吗(b365主板装win7完美解决方案)

  • 斐讯k2p a1和a2的区别(斐讯k2版本 a2和a5)

    斐讯k2p a1和a2的区别(斐讯k2版本 a2和a5)

  • 大麦网怎么买不同价位(大麦网怎么买不到张信哲的票)

    大麦网怎么买不同价位(大麦网怎么买不到张信哲的票)

  • 小米9se支持人脸解锁吗(小米9人脸识别是2d还是3d)

    小米9se支持人脸解锁吗(小米9人脸识别是2d还是3d)

  • 怎么把u盘文件编号(怎么把u盘文件夹的东西拖到根目录)

    怎么把u盘文件编号(怎么把u盘文件夹的东西拖到根目录)

  • 如何用b站播本地视频(如何使用b站播放本地视频)

    如何用b站播本地视频(如何使用b站播放本地视频)

  • 快递退货运费谁出(退货快递费给谁)

    快递退货运费谁出(退货快递费给谁)

  • 步数宝打不开怎么办(步数宝不显示步数)

    步数宝打不开怎么办(步数宝不显示步数)

  • oppor15耳机模式在哪(oppor15耳机模式在哪里设置怎么取消)

    oppor15耳机模式在哪(oppor15耳机模式在哪里设置怎么取消)

  • 文字下面加横线怎么弄(电脑上怎么在文字下面加横线)

    文字下面加横线怎么弄(电脑上怎么在文字下面加横线)

  • Bert+LSTM+CRF命名实体识别pytorch代码详解(lstm crf)

    Bert+LSTM+CRF命名实体识别pytorch代码详解(lstm crf)

  • 【前端】图片懒加载的原理和三种实现方式(前端image)

    【前端】图片懒加载的原理和三种实现方式(前端image)

  • 企业所得税核定征收税率表最新
  • 非营利组织免税资格认定申请表
  • 什么情况下不能做近视激光手术
  • 超过认证期的发票能用吗
  • 高新技术认定标准条件是什么
  • 主营业务收入和销售收入
  • 母子公司固定资产交易
  • 资产负债表应交税费期末余额是什么意思
  • 自己申报个人所得税需要补缴,必须自己申报自己补缴吗
  • 过次页的金额怎么来的
  • 计提所得税费用的账务处理
  • 汇算清缴产生的企业所得税如何做账
  • 融资租赁会计核算的一般原则是什么
  • 年前买东西
  • 买房印花税怎么计算出来
  • 小规模纳税人房租发票税率是多少
  • 买体育彩票收银配比是多少
  • 年会费用的会计分录
  • 预收电费怎么做会计分录
  • 汽车装饰装潢税率
  • 违约金收入如何缴税
  • 税务变更
  • 公司代扣的社保怎么做分录
  • 在会计上跨季度增值税专用发票怎么进行红冲?
  • 金税三期得死多少企业
  • 2020年916减免退库什么意思
  • 业务招待费有增值税吗
  • 存货清查的步骤
  • 专利权转销处理方案
  • 微软发布Windows 10正式版 新浪
  • 支付商业保险费属于什么现金流量项目
  • win7为什么现在不能用了
  • 外购无形资产发生的交易费用
  • 数人侵权行为的类型
  • 收购自然人股东的股权要注意什么
  • PHP:xml_set_notation_decl_handler()的用法_XML解析器函数
  • 在禁用uac时无法激活什么原因
  • win11桌面右键失效
  • 增值税税率为零的有哪些项目
  • 购买二手商住房没有给契税发票和购房发票
  • 报错500是什么意思
  • 国税代开普票能作废吗
  • 人力资源外包可以去吗
  • sap abap入门
  • login user
  • 去年计提的费用所得税汇算清缴之前冲销就不调整吗
  • pythonjson文件存储
  • 报销员工电话费怎么算
  • 印花税可以年底报一次
  • 提供学历教育服务取得收入免征增值税的有
  • 企业筹建期间可以上市吗
  • 一般纳税人简易征收的适用范围
  • MySQL错误什么意思
  • 市场开发费用会计分录
  • 同一控股下并合并的股票
  • 在建工程的消防要求
  • 银行销户余额怎么查
  • 新增注册资金
  • sql解析原理
  • 如何删除多余的空白表格
  • Win10预览版拆弹
  • linux将文件a.txt更名为b.txt
  • linux的用户
  • win8设置关机键
  • mac如何全屏窗口
  • centos7 目录结构
  • 电脑操作系统7
  • linux指令系统
  • window10 360
  • Win10 PC版 Build 14328上手体验视频评测
  • win7系统添加右键菜单在哪里设置
  • win8.1应用商店无法连接网络
  • bat vba
  • shell入门
  • node-red 全局变量
  • apk签名生成器
  • vue实现淘宝布局
  • fiori开发
  • dom的操作
  • 中国经济行业排名
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设