前端大屏数据实时更新

这篇具有很好参考价值的文章主要介绍了前端大屏数据实时更新。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 方案一:

在页面中使用 setInterval 每隔几秒去获取一下数据。伪代码如下:

created() {
    this.getLatestData()
},
destroyed(){
    clearInterval(this.timerId)
}
methods: {
 getLatestData() {
     this.timerId = setInterval(async() => {
        const res = await getLatestDataApi()
        const { data } = res
        this.list = data
      }, 1000 * 5)
    }
}

一般不建议这样使用,因为会给页面造成性能问题。

2. 方案二:

使用 websocket
如果使用 websocket 纯前端无法独立完成,需要后台 配合提供相应的接口。

3. 方案三:

使用SSE(Server-Sent Events), 纯前端无法独立完成,需要后台 配合提供相应的接口。

SSE优点

  • SSE 使用 HTTP 协议,现有的服务器软件都支持。WebSocket 是一个独立协议。
  • SSE 属于轻量级,使用简单;WebSocket 协议相对复杂。
  • SSE 默认支持断线重连,WebSocket 需要自己实现。
  • SSE 一般只用来传送文本,二进制数据需要编码后传送,WebSocket 默认支持传送二进制数据。
  • SSE 支持自定义发送的消息类型。

实现代码如下:

客户端:

created(){
    this.getDataList()
},
methods: {
   getDataList() {
      var _this = this
      // 使用node来启一个服务
      const source = new EventSource('http://localhost:9528/getlist')
      // readyState
      // 0 可能是第一次链接,也可能是断开链接了又重新链接,客户端和服务器正在链接,还没有链接上
      // 1 客户端和服务器链接上了,就可以接受服务器数据
      // 2 彻底断开链接并且不在重连
      console.log('source==>', source)
      console.log(EventSource.CONNECTING) // 0
      console.log(EventSource.OPEN) // 1
      console.log(EventSource.CLOSED) // 2

      // open事件是 客户端和服务器链接上触发
      source.onopen = function(event) {
        console.log('onopen===>', event)
      }
      // message 事件 是服务器向客户度发送消息时触发
      source.onmessage = function(event) {
        console.log('onmessage===>', event)
        // 服务端发送的数据 event.data
        _this.orderList = JSON.parse(event.data)
      }
      // 是服务器和客户端 链接出错时触发
      source.onerror = function(event) {
        console.log('onerror===>', event)
      }
    }
}

服务端:

使用node简单的启动一个服务:

mockData.js

// const orderData = [
//   {
//     date: '2022-9-27',
//     order: 50,
//     returnOrder: 2
//   },
//   {
//     date: '2022-9-27',
//     order: 50,
//     returnOrder: 2
//   }
// ]

// console.log(orderData)

 function getOrderList() {
  const orderData = []
  for (let i = 1; i <= 30; i++) {
    orderData.push({
      date: `2022-09-${i > 9 ? i : '0' + i}`,
      order: randomLowerBUpper(50, 100),
      returnOrder: randomLowerBUpper(5, 10)
    })
  }
  return orderData
}

function randomLowerBUpper(lower, upper) {
  const choice = upper - lower + 1
  return Math.floor(Math.random() * choice + lower)
}

module.exports = getOrderList

index.js

const http = require('http');
const getOrderList = require('./mockData.js')

const server = http.createServer((req,res)=>{
  const url = req.url
  console.log(url);
  // 发送 data 由 message组成 \n\n
  // mesage id,data,retry,event
  // data:数据
  if(url=="/getlist"){
    res.writeHead(200, {
      "Content-Type":"text/event-stream",
      "Cache-Control":"no-cache",
      "Connection":"keep-alive",
      "Access-Control-Allow-Origin": '*', // 解决跨域
    });
    res.write("retry: 10000\n");
    interval = setInterval(function () {
      res.write("data: " + JSON.stringify(getOrderList()) + "\n\n");
    }, 1000*5);

    req.connection.addListener("close", function () {
      clearInterval(interval);
    }, false);
  }
  // res.end()
})

server.listen(9528,()=>{
  console.log("服务已启动。。。端口9528");
})

参考文章文章来源地址https://www.toymoban.com/news/detail-743204.html

到了这里,关于前端大屏数据实时更新的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实时数据流无忧:用 SpringBoot 和 SSE 打造动态前端更新的终极指南

    你知道什么是开发者的梦魇吗?慢!慢!慢!在一个需要实时数据更新的应用中,如果数据像乌龟一样慢吞吞地爬行,那用户体验就会像坐过山车一样直线下降。所以今天,我们要化身为数据传输的超级英雄,用 SpringBoot 和 SSE(服务器发送事件)打造一个超酷、超快、而且超

    2024年02月02日
    浏览(28)
  • Vscode常用插件及设置(前端版,实时更新ing

    写完代码后鼠标右击将代码在浏览器中运行 汉化Vscode html、css、js、less图标显示 代码块写完后使用Live Server,每次修改代码Ctrl+S后浏览器无需再刷新即可跟着变化, 与win+左键或win+右键搭配爽歪歪,直接效率起飞!!! 外联样式提示插件 错误提示信息 将.less文件生成一个.

    2024年02月02日
    浏览(31)
  • 【前端学习记录】vue中使用el-upload组件时,上传文件进度条没有实时更新

    问题背景 今天在项目中遇到一个问题,使用el-upload组件时,上传文件进度条没有实时更新,需要手动点击一下才会更新。 原理及可尝试方案 el-upload 组件默认的进度条是通过 Ajax 请求上传文件,并且进度条通过监听 xhr.upload 的 progress 事件来实时更新。但是,有些浏览器在处

    2024年02月01日
    浏览(40)
  • Python如何随数据更新实时画图?Python实时动态绘图

    在数据分析和可视化场景中,我们常常需要实现实时动态图表,比如每分钟读取数据库新的记录,及时更新图表显示最新数据,而不是静态显示某个时间点的数据。本文将介绍使用Python matploblib库的animation功能实现实时动态绘图的方法。 问题背景 我们有一个Excel表,其中记录

    2024年02月12日
    浏览(37)
  • Java面试基础|数据结构 -实时更新

    1.HashMap和ConcurrentHashMap介绍 核心是一个Node数组, 数据结构与hashMap相似 使用CAS操作来实现无锁的更新,提高了并发性。当更新节点时,它会使用CAS来替换节点的值或链接,如果CAS失败,表明有其他线程也在进行修改,当前线程可以重试或锁定节点 对于复杂的结构修改操作

    2024年01月17日
    浏览(37)
  • Rust采集天气预报信息并实时更新数据

    最近天气温度时高时低,虽说这是大自然的力量人无法抗拒,不能改变那么我们就做预防工作。今天我将用Rust写一个爬虫程序实现电脑桌面实时更新天气情况,这个是一个底层逻辑,需要多方面配合,不仅要有完善的代码还有爬虫IP试试更新才能保证数据最完整最新。 这是一

    2024年01月19日
    浏览(36)
  • vue中组件动态传值,实现数据实时更新

    在一些项目需求中需要父组件向子组件动态传值,比如父组件动态通过axios获取数据,然后传给子组件,子组件根据拿到的数据进行展示。 props传值的时候,只会首次传递绑定的值,不会变化 方式1 利用watch监听props变化 方式2 利用ref获取子组件,调用子组件的方法将值传递过

    2024年02月16日
    浏览(36)
  • 小程序弹幕自动滚动实时更新数据功能

    需求 最近遇到的需求,写一个弹幕功能 大致就是实现这样的效果 弹幕轮播,上下两排,一共30个弹幕,30个轮播完毕之后获取新的弹幕数据 实现方法  目前我想到的实现方法是用css的动画来实现这个功能 布局层级 给barrageBox盒子一个相对定位 给barrageList绝对定位 先将list盒子

    2024年01月20日
    浏览(32)
  • WPF绑定数据,增删改后实时更新TreeView/ListView

    WPF的界面的确好看,也引入了很多新功能,和winform相比更先进更强大......那么狗儿蛋,代价是什么? 代价就是WPF学起来比较费力。 数据绑定是WPF的特色之一,可以省去写代码更新UI界面的工作。这次打算做一个管理数据的小软件,自然的我也打算在界面上弄个TreeView,然后把

    2024年02月09日
    浏览(42)
  • Android:实时更新时间

    心想着也就是更新精确到分钟,不用精确到秒,定时器就没有必要,系统是有广播 Intent.ACTION_TIME_TICK 可以直接用 动态注册广播 主方法里面调用一下 接收广播并处理 精确到时:分的方法 

    2024年02月15日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包