您现在的位置是:IT资讯 >>正文
原来Spring可以这样推送消息到客户端!
IT资讯9148人已围观
简介哈喽,大家好,我是了不起。Spring框架中可以使用SseEmitter实现服务端向客户端推送消息,今天盘一盘。SseEmitter简介SseEmitter是Spring Framework中用于服务 ...
哈喽,原S样推大家好 ,可客户我是送消了不起。
Spring框架中可以使用SseEmitter实现服务端向客户端推送消息 ,原S样推今天盘一盘 。可客户
SseEmitter简介
SseEmitter是送消Spring Framework中用于服务器发送事件(Server-Sent Events, SSE)的类 。SSE是原S样推一种允许服务器主动向客户端推送数据的技术 ,通常用于实现如实时通知 、可客户数据流等功能。服务器租用送消其工作原理基于HTTP协议,原S样推客户端通过HTTP请求订阅服务器的可客户事件流,服务器则通过SseEmitter对象持续向客户端发送事件。送消
SseEmitter的原S样推核心特性
单向通信 :SSE是单向的,只允许服务器向客户端推送数据,可客户客户端不能通过此通道向服务器发送数据。送消基于HTTP :SSE使用标准的HTTP协议,因此不需要额外的源码下载协议支持 ,易于实现和使用。自动重连:如果连接中断,客户端浏览器会自动尝试重新连接服务器。事件流格式:SSE使用简单的文本格式传输数据 ,每条消息以data:开头,并以两个换行符\n\n结束SseEmitter的使用场景
实时数据流:在需要实时数据更新的应用中 ,如股票交易平台 ,服务器可以使用SseEmitter向客户端推送最新的股票价格和交易信息。模板下载实时通知 :适用于需要向用户发送实时通知的场景,例如在线教育平台的新课程发布或作业提交通知。聊天应用:在聊天应用中,SseEmitter可以用来实现实时消息推送 ,提高消息传递的效率 。监控系统 :在监控系统中,SseEmitter可以用于实时推送监控数据,如物联网项目中传感器采集的数据,以实时监控设备状态。亿华云SseEmitter的基本用法
创建SseEmitter实例:在控制器中创建一个SseEmitter实例,并将其返回给客户端。发送事件 :通过SseEmitter实例的send方法向客户端发送事件 。处理连接关闭:通过SseEmitter的onCompletion和onTimeout方法处理连接关闭或超时的情况。通过SseEmitter,开发者可以构建出高效 、可靠的实时应用,提升用户体验和系统性能。免费模板下面我们通过一个简单示例演示下
前端服务
使用Vue CLI创建一个Vue 3项目安装Vue CLI 复制npm install -g @vue/cli1. 创建Vue 3项目 复制vue create my-vue3-app1. 启动服务 复制cd my-vue3-app npm run serve1.2. 创建一个vue文件EventList.vue获取消息,然后进行等待服务端的消息 。
复制<template> <div> <h1>Server-Sent Events</h1> <ul> <li v-for="message in messages" :key="message.id">{ { message.content }}</li> </ul> </div> </template> <script setup> import { ref, onMounted, onUnmounted } from vue; import { SseClient } from ./SseClient; const messages = ref([]); const sseClient = new SseClient((event) => { const data = JSON.parse(event.data); messages.value.push(data); }); onMounted(() => { sseClient.connect(); }); onUnmounted(() => { sseClient.disconnect(); }); </script> <style scoped> /* Add your styles here */ </style>1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.创建JS文件SseClient
复制export class SseClient { constructor(onMessage) { this.onMessage = onMessage; this.eventSource = null; } connect() { this.eventSource = new EventSource(http://localhost:8089/events/54321); this.eventSource.onmessage = (event) => { this.onMessage(event); }; this.eventSource.onerror = (error) => { this.disconnect(); }; } disconnect() { if (this.eventSource) { this.eventSource.close(); this.eventSource = null; } } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.然后再Vue项目入口 APP.vue中引入刚才的Vue文件 。
后端服务
创建SpringBoot服务
直接写一个简易的Controller ,将SseEmitter 缓存起来,可以直接进行消息发送。
复制@Controller public class SseEmitterController { private static Map<String, SseEmitter> sseCache = new ConcurrentHashMap<>(); @CrossOrigin(origins = "*") @GetMapping("/events/{ userId}") public SseEmitter stream(@PathVariable String userId) throws IOException { sseCache.put(userId,new SseEmitter(10 * 60 * 1000L)); SseEmitter emitter = sseCache.get(userId); Map<String,String> map = new HashMap<>(); map.put("id", userId); map.put("content", "连接成功"); emitter.send(map); return emitter; } @GetMapping("/sendMessage/{ userId}") public String sendMessage(@PathVariable String userId, @RequestParam(name = "message", required = false) String message) throws IOException { SseEmitter emitter = sseCache.get(userId); Map<String,String> map = new HashMap<>(); map.put("id", userId); map.put("content", message); emitter.send(map); return "成功"; } @GetMapping("/close/{ userId}") public String close(@PathVariable String userId ) throws IOException { SseEmitter emitter = sseCache.get(userId); emitter.complete(); return "成功"; } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.前后端启动后联调 :
初始化连接成功。
图片
再手动发送消息 。
图片
客户端接收消息:
图片
以上是一个简易的高防服务器服务端主动推送消息给客户端的例子 。
Tags:
转载:欢迎各位朋友分享到网络,但转载请说明文章出处“算法与编程”。http://www.bzli.cn/html/672c7899249.html
下一篇:楼宇自动化系统的潜在威胁
相关文章
浅学Go下的Ssti漏洞问题
IT资讯前言作为强类型的静态语言,golang的安全属性从编译过程就能够避免大多数安全问题,一般来说也唯有依赖库和开发者自己所编写的操作漏洞,才有可能形成漏洞利用点,在本文,主要学习探讨一下golang的一些 ...
【IT资讯】
阅读更多14款被严重低估的安全红队测试工具推荐
IT资讯工具往往可以决定网络安全渗透测试或红队演练活动的成败。虽然Kali中的许多工具都已经过验证且稳定可靠,但并不能适合所有渗透测试场景。对于安全红队而言,需要在不同测试需求下,确保有足够的装备来实现测试目 ...
【IT资讯】
阅读更多钓鱼检测机制已失效:为何大多数攻击都像零日漏洞般难以防范
IT资讯一、钓鱼攻击威胁持续升级2025年,钓鱼攻击仍是企业面临的重大安全挑战。随着攻击者越来越多地采用基于身份验证的技术而非软件漏洞利用,钓鱼攻击的威胁程度甚至超过以往。如今绕过多因素认证MFA)的钓鱼工具 ...
【IT资讯】
阅读更多
热门文章
最新文章
友情链接
- 戴尔PowerFlex 4.0为客户的IT现代化之旅奠定了坚实的基础
- 如何使用微pe安装iso系统(一步步教你轻松安装iso系统)
- Win10U官方安装教程(从零开始,快速学习Win10系统的安装与配置方法)
- Win7硬盘重新分区(Win7硬盘重新分区教程,详解步骤及注意事项)
- 在 NVIDIA BlueField DPU 上运行 vSphere,构建现代化数据中心
- 戴尔科技边缘计算解决方案,助力制造业企业实现智能转型
- 电脑U盘重做系统教程(详细步骤和注意事项)
- 戴尔Precision 7920塔式工作站让数据及时备份避免“曼德拉效应”
- 以o派手机怎么样?(以o派手机的性能、摄像头、续航和价格等方面的评价)
- 利用最新大白菜U盘装系统教程,轻松完成系统安装(以大白菜U盘装系统为例,快速上手系统安装) 网站建设香港物理机亿华云云服务器源码库企业服务器b2b信息平台