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

如何实现服务器主动向客户端推送实时数据

        当需要实现服务器主动向客户端推送实时数据时,Server-Sent Events(SSE)是一种简单且有效的解决方案。本文将介绍如何使用Server-Sent Events,在后端使用Spring Boot实现,在前端使用Vue 3实现,并提供一个完整的示例。

1、Server-Sent Events介绍

        Server-Sent Events(SSE)是一种基于HTTP协议的服务器推送技术,它允许服务器实时向客户端推送数据。相较于传统的轮询方式,SSE更为高效,因为它建立了单向连接,服务器可以在有新数据时直接将数据推送给客户端。

2、后端实现(使用Spring Boot)

        首先,创建一个Spring Boot项目。在项目中,我们将使用Spring MVC框架来处理SSE请求。创建一个控制器类 SSEController。

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;import java.io.IOException;@RestController
@RequestMapping("/sse")
public class SSEController {@GetMapping("/events")public SseEmitter handleSse() {SseEmitter emitter = new SseEmitter();new Thread(() -> {try {for (int i = 0; i < 10; i++) {// 模拟每隔1秒发送一次消息Thread.sleep(1000);emitter.send(SseEmitter.event().name("message").data("Update " + i));}} catch (Exception e) {emitter.completeWithError(e);} finally {emitter.complete();}}).start();return emitter;}
}

        在上述代码中,我们创建了一个 /sse/events 的端点,客户端可以通过该端点建立SSE连接,后端会模拟每秒发送一次消息。

3、前端实现(使用Vue 3)

        现在,让我们使用Vue 3来创建一个简单的页面来接收Server-Sent Events。首先,确保你的项目中安装了Vue 3:

npm install vue@next

        然后,创建一个Vue组件,例如 SSEComponent.vue

<template><div><h1>Server-Sent Events Example</h1><div v-for="message in messages" :key="message">{{ message }}</div></div>
</template><script setup>import { ref, onMounted } from 'vue';const messages = ref([]);const setupSSE = () => {const eventSource = new EventSource("/sse/events");eventSource.addEventListener("message", (event) => {messages.value.push(event.data);});eventSource.addEventListener("error", (event) => {console.error("SSE Error:", event);eventSource.close();});};onMounted(() => {setupSSE();});},
};
</script>

        在上述代码中,我们创建了一个Vue组件,通过 EventSource 建立SSE连接,监听 message 事件,将收到的消息添加到 messages 数组中。

4、总结

        这样,当访问前端页面时,你将看到实时更新的消息,这些消息是通过Server-Sent Events从后端推送过来的。

        通过这个简单的示例,你可以了解如何使用Server-Sent Events在Spring Boot和Vue 3中实现实时数据推送。实际项目中,你可能需要更加复杂的逻辑和错误处理,但这个示例可以作为一个起点,帮助你构建更复杂的实时应用。

相关文章:

  • CSS尺寸单位详解(rpx、px、pt、em、rem、%、vh、vw的区别)
  • pod 基础 2
  • 惠普83752A合成扫频器/信号源0.01-20GHz
  • imgaug库指南(四):从入门到精通的【图像增强】之旅
  • flutter学习-day22-使用GestureDetector识别手势事件
  • 使用react+vite开发项目时候,部署上线后刷新页面无法访问解决办法
  • 【响应式编程-03】Lambda表达式底层实现原理
  • 【INTEL(ALTERA)】Intel Agilex7 设备的外设图像比特流大小是多少?
  • Kafka集群详解
  • 电缆厂 3D 可视化管控系统 | 图扑数字孪生
  • 【React系列】受控非受控组件
  • 接口功能测试策略
  • 2024年全球网络安全预测报告
  • DBeaver配置类Navicat显示字段是否非空
  • MySQL模糊查询详解
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【391天】每日项目总结系列128(2018.03.03)
  • Js基础——数据类型之Null和Undefined
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • spring-boot List转Page
  • Terraform入门 - 3. 变更基础设施
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 不上全站https的网站你们就等着被恶心死吧
  • 从setTimeout-setInterval看JS线程
  • 基于Android乐音识别(2)
  • 记一次和乔布斯合作最难忘的经历
  • 简单易用的leetcode开发测试工具(npm)
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​什么是bug?bug的源头在哪里?
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #考研#计算机文化知识1(局域网及网络互联)
  • (27)4.8 习题课
  • (C语言)二分查找 超详细
  • (pojstep1.1.2)2654(直叙式模拟)
  • (Python第六天)文件处理
  • (二)fiber的基本认识
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (十三)Flask之特殊装饰器详解
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET 指南:抽象化实现的基类
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET开发人员必知的八个网站
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Responsebody与@RequestBody
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [20150904]exp slow.txt
  • [20161214]如何确定dbid.txt