Java Server-Sent Events通信
Server-Sent Events特点与优势
后端可以向前端发送信息,类似于websocket,但是websocket是双向通信,但是sse为单向通信,服务器只能向客户端发送文本信息,效率比websocket高。
单向通信:SSE只支持服务器到客户端的单向通信。这对于那些只需要服务器推送数据而无需客户端响应的场景非常有效,例如实时新闻、股票报价更新等。
简单轻量:SSE在实现上通常比WebSocket更简单和轻量,因为它是基于标准的HTTP协议实现的。
自动重连:SSE支持自动重连机制,如果连接断开,浏览器会尝试重新建立连接。
易于使用和兼容性:对于简单的单向数据流,SSE更容易实现,且兼容性较好。
后端代码
stream() 方法返回的 SseEmitter 对象用于建立一个 SSE (Server-Sent Events) 连接,但它本身并不负责推送数据。这个方法的主要作用是:
建立连接:当客户端请求 /notification 路径时,stream() 方法被调用,创建并返回一个 SseEmitter 实例。这个实例代表了与客户端之间的一个长连接。
保持连接开启:这个连接将保持开启状态,直到服务器发送完成信号或连接超时。这允许服务器在后续任何时间点向客户端推送数据。
等待数据推送:虽然 stream() 方法创建了连接,但实际的数据推送是由其他部分的代码来处理的。通常,这涉及到在服务层或控制器的其他部分设置逻辑,以在某些事件发生时调用 SseEmitter 的 send() 方法来推送数据。
连接默认超时时间为三十分钟,这是设置为1天。
@RestController
@RequestMapping("/admin/homePage")
public class NotificationSSEController {// executorService: 一个线程池,用于管理和执行后台任务。private final ExecutorService executorService = Executors.newCachedThreadPool();// emitter: 用于SSE(服务器发送事件)的SseEmitter实例。这个对象用来向客户端发送实时更新。// SseEmitter是Spring框架提供的一个类,用于处理HTTP连接以发送SSE。// 1天 = 24小时 * 60分钟 * 60秒 * 1000毫秒private SseEmitter emitter = new SseEmitter(24L * 60 * 60 * 1000);/*** 返回的是sse连接,不参与返回数据* @return*/@CrossOrigin@GetMapping(value = "/notification", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public SseEmitter stream() {sendNotification(); // 当客户端连接时立即发送通知return emitter;}// A函数:Spring Boot定时函数,每10秒执行一次@Scheduled(fixedRate = 1000)public void scheduledTask() {sendNotification();}// B函数:负责SSE发送public void sendNotification() {executorService.execute(() -> {try {NotificationSSE notificationSSE = new NotificationSSE();emitter.send(SseEmitter.event().id(String.valueOf(System.currentTimeMillis())).data(JSONObject.toJSONString(notificationSSE)));} catch (Exception e) {emitter.completeWithError(e);}});}
}
前端代码
<!DOCTYPE html>
<html>
<head><title>SSE Example</title>
</head>
<body>
<script>var eventSource = new EventSource("http://localhost/admin/homePage/notification");eventSource.onmessage = function(event) {console.log(event.data);};
</script>
</body>
</html>

相关文章:
Java Server-Sent Events通信
Server-Sent Events特点与优势 后端可以向前端发送信息,类似于websocket,但是websocket是双向通信,但是sse为单向通信,服务器只能向客户端发送文本信息,效率比websocket高。 单向通信:SSE只支持服务器到客…...
[蓝桥杯]真题讲解:冶炼金属(暴力+二分)
蓝桥杯真题视频讲解:冶炼金属(暴力做法与二分做法) 一、视频讲解二、暴力代码三、正解代码 一、视频讲解 视频讲解 二、暴力代码 //暴力代码 #include<bits/stdc.h> #define endl \n #define deb(x) cout << #x << &qu…...
Fastbee开源物联网项目RoadMap
架构优化 代码简化业务&协议解耦关键组件支持横向拓展网络协议支持横向拓展,包括:mqtt broker,tcp,coap,udp,sip等协议插件化编码脚本化业务代码模版化消息总线 功能优化 网关/子网关:上线,绑定,拓扑࿰…...
Linux文件管理技术实践
shell shell的种类(了解) shell是用于和Linux内核进行交互的一个程序,他的功能和window系统下的cmd是一样的。而且shell的种类也有很多常见的有c shell、bash shell、Korn shell等等。而本文就是使用Linux最常见的bash shell对Linux常见指令展开探讨。 内置shell…...
Python如何按指定列的空值删除行?
目录 1、按指定列的空值删除行2、滑动窗口按指定列的值填充最前面的缺失值 1、按指定列的空值删除行 数据准备: df pd.DataFrame({C1: [1, 2, 3, 4], C2: [A, np.NaN, C, D], C3: [V1, V2, V3, np.NaN]}) print(df.to_string()) C1 C2 C3 0 1 A V1 1 …...
【云原生】Docker的镜像创建
目录 1.基于现有镜像创建 (1)首先启动一个镜像,在容器里做修改 编辑(2)然后将修改后的容器提交为新的镜像,需要使用该容器的 ID 号创建新镜像 实验 2.基于本地模板创建 3&am…...
大语言模型推理提速:TensorRT-LLM 高性能推理实践
作者:顾静 TensorRT-LLM 如何提升 LLM 模型推理效率 大型语言模型(Large language models,LLM)是基于大量数据进行预训练的超大型深度学习模型。底层转换器是一组神经网络,这些神经网络由具有 self-attention 的编码器和解码器组…...
全面理解“张量”概念
1. 多重视角看“张量” 张量(Tensor)是一个多维数组的概念,在不同的学科领域中有不同的应用和解释: 物理学中的张量: 在物理学中,张量是一个几何对象,用来表示在不同坐标系下变换具有特定规律的…...
MacOS X 安装免费的 LaTex 环境
最近把工作终端一步步迁移到Mac上来了,搭了个 Latex的环境,跟windows上一样好用。 首先,如果是 intel 芯片的 macOS,那么可以使用组合1, 如果是 M1、M2 或 M3 芯片或者 intel 芯片的 Mac book,则应该使用…...
深入Amazon S3:实战指南
Amazon S3(Simple Storage Service)是AWS(Amazon Web Services)提供的一项强大的云存储服务,广泛用于存储和检索各种类型的数据。本篇实战指南将深入介绍如何在实际项目中充分利用Amazon S3的功能,包括存储桶的创建、对象的管理、权限控制、版本控制、日志记录等方面的实…...
Ansible自动化运维(三)Playbook 模式详解
👨🎓博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...
LCS板子加逆向搜索
LCS 题面翻译 题目描述: 给定一个字符串 s s s 和一个字符串 t t t ,输出 s s s 和 t t t 的最长公共子序列。 输入格式: 两行,第一行输入 s s s ,第二行输入 t t t 。 输出格式: 输出 s s s…...
不同知识表示方法与知识图谱
目录 前言1 一阶谓词逻辑1.1 简介1.2 优势1.3 局限性 2 产生式规则2.1 简介2.2 优势2.3 局限性 3 框架系统3.1 简介3.2 优势3.3 局限性 4 描述逻辑4.1 简介4.2 优势4.3 局限性 5 语义网络5.1 简介5.2 优势5.3 局限性 结语 前言 知识表示是人工智能领域中至关重要的一环&#x…...
Kotlin程序设计 扩展篇(一)
Kotlin程序设计(扩展一) **注意:**开启本视频学习前,需要先完成以下内容的学习: 请先完成《Kotlin程序设计》视频教程。请先完成《JavaSE》视频教程。 Kotlin在设计时考虑到了与Java的互操作性,现有的Ja…...
星环科技基于第五代英特尔®至强®可扩展处理器的分布式向量数据库解决方案重磅发布
12月15日,2023 英特尔新品发布会暨 AI 技术创新派对上,星环科技基于第五代英特尔至强可扩展处理器的Transwarp Hippo分布式向量数据库解决方案重磅发布。该方案利用第五代英特尔至强可扩展处理器带来的强大算力,实现了约 2 倍的代际性能提升&…...
一体化运维的发展趋势与未来展望
随着信息技术的迅猛发展,企业的IT系统已经从单一的、孤立的应用转变为多元化、复杂化的系统集群。云计算、大数据、物联网等前沿技术的广泛应用,使得企业的IT运维面临着前所未有的挑战。在这样的背景下,一体化运维作为一种新型的运维模式&…...
科技云报道:金融大模型落地,还需跨越几重山?
科技云报道原创。 时至今日,大模型的狂欢盛宴仍在持续,而金融行业得益于数据密集且有强劲的数字化基础,从一众场景中脱颖而出。 越来越多的公司开始布局金融行业大模型,无论是乐信、奇富科技、度小满、蚂蚁这样的金融科技公司&a…...
C语言入门到精通之练习34:求100之内的素数
题目:求100之内的素数。 程序分析:质数(素数)酵母素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。 代码如下: #include <stdio.h># #include &l…...
Qt采集本地摄像头推流成rtsp/rtmp(可网页播放/支持嵌入式linux)
一、功能特点 支持各种本地视频文件和网络视频文件。支持各种网络视频流,网络摄像头,协议包括rtsp、rtmp、http。支持将本地摄像头设备推流,可指定分辨率和帧率等。支持将本地桌面推流,可指定屏幕区域和帧率等。自动启动流媒体服…...
Oracle按日周月年自动分区
目录 1、分区键 2、初始分区 3、周月年自动分区 4、按日自动分区表建表语句 与普通建表语句相比,分区表多了一些分区信息; 1、分区键 以下面销售明细表为例,以data_dt为分区键,NUMTODSINTERVAL(1, day) 按日分区 PARTITION …...
从单张图片到实时视频流:给RK3588上的YOLOv11推理Demo加个OpenCV‘外挂’
从单张图片到实时视频流:RK3588上YOLOv11与OpenCV的高效整合实战 当开发者首次在RK3588上成功运行YOLOv11的静态图片推理时,那种成就感往往伴随着新的渴望——如何让这个模型"活"起来?本文将带你突破单帧测试的局限,通过…...
为什么你的BUCK电路不稳定?峰值电流模式Fm增益的5个关键影响因素
为什么你的BUCK电路不稳定?峰值电流模式Fm增益的5个关键影响因素 在电源设计领域,BUCK电路的稳定性问题一直是工程师们头疼的难题。尤其是采用峰值电流模式控制的BUCK转换器,其调制器增益Fm的合理设置直接关系到整个系统的动态响应和稳定性。…...
语音端点检测VAD的深度学习进化:从传统方法到RNN的实战对比
语音端点检测VAD的深度学习进化:从传统方法到RNN的实战对比 在嘈杂的咖啡馆里,语音助手能否准确识别你的唤醒词?视频会议中,系统如何智能过滤键盘敲击声?这些场景的核心技术,都离不开语音端点检测ÿ…...
基于Transformer架构解析:Nanbeige 4.1-3B 模型原理与性能调优
基于Transformer架构解析:Nanbeige 4.1-3B 模型原理与性能调优 最近在星图GPU平台上部署和测试Nanbeige 4.1-3B模型时,我发现很多朋友对Transformer架构的理解还停留在“听说过”的阶段,对模型参数、显存占用这些概念更是感到头疼。其实&…...
政务大模型在智能客服中的实践:从架构设计到性能优化
最近在参与一个政务智能客服系统的项目,从零开始基于大模型技术构建了一套服务。政务领域的客服系统和我们常见的电商或通用客服很不一样,它对于准确性、稳定性和安全性的要求极高。今天就来分享一下我们在这个项目中的实践,从架构设计到性能…...
OpenClaw多模型切换:nanobot镜像动态加载不同规格Qwen
OpenClaw多模型切换:nanobot镜像动态加载不同规格Qwen 1. 为什么需要动态切换模型 在本地部署AI助手时,我发现一个痛点:不同任务对模型能力的需求差异很大。简单任务如整理文件、生成周报草稿,用7B参数模型完全够用;…...
网页设计毕业设计选题指南:从零构建一个响应式个人作品集网站
作为一名即将毕业的计算机相关专业学生,你是否正为“网页设计”这门课的毕业设计选题而头疼?选题太简单,显得没技术含量;选题太复杂,又怕自己搞不定,最后做出一个只能在老师电脑上运行的“演示即崩溃”项目…...
少量样本下具身智能的新环境快速适应路径
具身智能以“感知-决策-执行”的闭环能力,打破了传统智能“脱离物理世界”的局限,但其在真实场景中的应用常面临样本稀缺的困境——工业生产线的新品切换、家庭环境的物品摆放变化、灾害现场的未知障碍,都无法提供海量标注样本用于模型训练。…...
htcw_esp_panel:ESP32嵌入式显示与触摸的编译期硬件抽象框架
1. htcw_esp_panel:面向嵌入式显示与人机交互的全栈式硬件抽象层htcw_esp_panel 是一个专为 ESP32 系列 SoC(包括 ESP32-S2/S3/C3/P4)设计的轻量级、可配置化硬件抽象库。它并非简单的驱动封装,而是一套覆盖显示、触摸、按键、SD …...
nli-distilroberta-base零基础上手:无需NLP背景,5个示例掌握句子对逻辑判断
nli-distilroberta-base零基础上手:无需NLP背景,5个示例掌握句子对逻辑判断 1. 项目介绍 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)服务,专门用于分析两个句子之间的逻辑关系。即使你完全没有NLP背景…...
