当前位置: 首页 > news >正文

前端vue2每三十秒被动接受后端服务器发送过来得数据

要在 Vue 2 中实现每三十秒被动接收后端服务器发送的数据,而不是前端主动发起请求获取数据,可以考虑使用 Server-Sent Events (SSE) 或者 WebSocket。由于你提到的是“被动”接收,并且有固定的时间间隔(30秒),Server-Sent Events (SSE) 更加适合这种单向、定时的数据推送需求。

使用 Server-Sent Events (SSE)

SSE 是一种允许服务器向浏览器推送更新的技术,非常适合于需要从服务器接收实时更新的场景。与 WebSocket 不同,SSE 只支持单向通信(服务器到客户端),但它的实现更为简单,特别适用于像定时数据推送这样的场景。

实现步骤
  1. 后端:确保你的后端能够支持 SSE。通常情况下,这意味着你需要在后端设置一个特殊的路由或端点,该端点会保持连接打开并定期发送数据。

    示例(Node.js/Express):

    app.get('/events', (req, res) => {res.setHeader('Content-Type', 'text/event-stream');res.setHeader('Cache-Control', 'no-cache');res.setHeader('Connection', 'keep-alive');const sendEvent = () => {res.write(`data: ${JSON.stringify({content: 'Hello at ' + new Date().toISOString()})}\n\n`);};// 每30秒发送一次数据const intervalId = setInterval(sendEvent, 30000);// 当客户端断开连接时清除定时器req.on('close', () => {clearInterval(intervalId);res.end();});
    });
    
  2. 前端:在 Vue 组件中使用 SSE 接收数据。

前端代码示例
<template><div><ul><li v-for="(message, index) in messages" :key="index">{{ message }}</li></ul></div>
</template><script>
export default {data() {return {eventSource: null,messages: []};},mounted() {this.connectToSSE();},methods: {connectToSSE() {if ('EventSource' in window) {this.eventSource = new EventSource('/events'); // 确保这里的URL指向你的SSE端点this.eventSource.onmessage = (event) => {const message = JSON.parse(event.data).content;this.messages.push(message); // 添加新消息到列表};this.eventSource.onerror = (error) => {console.error('SSE error occurred:', error);if (this.eventSource) {this.eventSource.close(); // 遇到错误时关闭连接}};} else {console.warn('Your browser does not support Server-Sent Events.');}}},beforeDestroy() {if (this.eventSource) {this.eventSource.close(); // 确保组件销毁前关闭SSE连接}}
};
</script>

关键点解释

  • EventSource: 这是浏览器提供的用于处理 SSE 的接口。它允许你监听来自服务器的消息。
  • onmessage: 当接收到消息时触发此事件处理函数。在这个例子中,我们将每个接收到的消息添加到了 messages 数组中,以便显示在页面上。
  • onerror: 错误发生时触发。这里我们简单地关闭了连接,但在实际应用中,你可能还需要考虑重连逻辑。
  • beforeDestroy: 在组件被销毁之前关闭 SSE 连接是非常重要的,以避免内存泄漏和其他潜在问题。

这种方法使得前端无需主动轮询服务器来获取数据,而是通过 SSE 被动接收后端定时推送的数据,非常适用于需要实时更新但又不需要双向通信的场景。如果你的应用场景对实时性要求更高,或者需要更复杂的交互模式,则可能需要考虑 WebSocket。

相关文章:

  • 广西网站设计服务百度关键词首页排名怎么上
  • 济南网站备案合肥网站优化推广方案
  • 212200扬中热线论坛关键词seo公司推荐
  • 做花茶的网站今日油价92汽油价格调整最新消息
  • 企业网站访问量的第一来源是( )百度信息流开户多少钱
  • 同一个网站可以同时做竞价和优化网店运营在哪里学比较好些
  • 服务器数据恢复——异常断电导致服务器故障的数据恢复案例
  • 编程语言的发展逻辑:从人类认知到人工智能协同
  • C预处理详解2
  • WHAT - React Native 的 Expo Router
  • Redis哈希表Rehash全解析:扩容缩容背后的渐进式智慧
  • ref() 与 reactive()
  • 黑马Day01-03集开始
  • 原子操作(CAS)
  • 《TCP/IP 详解 卷1:协议》第13章:TCP连接管理
  • java-SpringBoot框架开发计算器网页端编程练习项目【web版】
  • 马克思主义基本原理知识笔记
  • MediaMarktSaturn EDI 对接指南:欧洲零售卖场的数字化协同范例
  • 虚幻基础:插槽
  • C++面试6——类和结构体的区别和使用场景
  • 零基础学习RabbitMQ(3)--核心概念
  • 打包上传到Linux部署并启动
  • C++ string类的操作
  • FFMPEG常用函数
  • 应用层协议 HTTP
  • 618风控战升级,瑞数信息“动态安全+AI”利剑出鞘