🌐 Server-Sent Events(SSE)入门与实战指南
ps:记录一波自己的一些笔记
1. 什么是 SSE?
SSE(Server-Sent Events) 是一种基于 HTTP 协议的服务端推送技术,允许服务端主动向浏览器发送数据。它使用浏览器原生的
● 通讯方向:服务端 → 客户端(单向)
● 协议基础:HTTP(底层是 TCP)
● 应用场景:通知推送、进度反馈、数据订阅等
SSE 建立的是 HTTP 长连接,非常适合前端只需“被动接收”的场景,例如:
● 后台任务完成通知
● 保单状态更新
● 实时线索提醒
----------------------
2. SSE 与 WebSocket 对比
----------------------
3. 项目实践场景:订单/通知系统
在实际项目中,我们使用 Spring Boot 2.7.5 + React 实现了一个基于 SSE 的订单状态实时通知系统。客户端建立长连接,后端在收到订单状态变更后将消息实时推送。
----------------------
4. 后端实现(Spring Boot)
4.1 添加依赖(Gradle)
----------------------
4.2 核心 Controller 示例(支持断点续传)
----------------------
5. 前端实现(HTML + JS)
使用浏览器原生的
----------------------
6. SSE 核心机制说明
✅️ 自动重连
浏览器原生支持,当连接断开时,每 3 秒自动尝试重连,无需手动干预。
✅️ 消息续发(Last-Event-ID)
每条消息可通过
✅️ 连接管理建议
● 使用
● clientId 建议为用户 ID、浏览器 sessionId 等唯一值
● 清理已断开的连接,防止内存泄漏
----------------------
7. SSE 心跳机制(可选)
虽然浏览器会自动维持连接,但为了防止中间网络设备关闭空闲连接,可定期发送空消息:
建议使用定时任务每 30 秒推送一次。
----------------------
8. 和轮询对比资源消耗
----------------------
9. 总结
✅️ SSE 是一种轻量、简单、易部署的服务端推送方案,适合:
● 单向通知
● 实时状态更新
● 中低频消息推送
相比 WebSocket,SSE 上手更快、兼容性好,尤其适合在已有 Spring Boot 项目中快速集成。
2 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: rupert)
ps:记录一波自己的一些笔记
1. 什么是 SSE?
SSE(Server-Sent Events) 是一种基于 HTTP 协议的服务端推送技术,允许服务端主动向浏览器发送数据。它使用浏览器原生的
EventSource 接口建立一个长连接,通过 text/event-stream 格式将消息源源不断推送给前端页面。● 通讯方向:服务端 → 客户端(单向)
● 协议基础:HTTP(底层是 TCP)
● 应用场景:通知推送、进度反馈、数据订阅等
SSE 建立的是 HTTP 长连接,非常适合前端只需“被动接收”的场景,例如:
● 后台任务完成通知
● 保单状态更新
● 实时线索提醒
----------------------
2. SSE 与 WebSocket 对比
✅️ 适合使用 SSE 的场景:只需要服务端向前端推送消息,无需前端向服务端频繁通信。
----------------------
3. 项目实践场景:订单/通知系统
在实际项目中,我们使用 Spring Boot 2.7.5 + React 实现了一个基于 SSE 的订单状态实时通知系统。客户端建立长连接,后端在收到订单状态变更后将消息实时推送。
----------------------
4. 后端实现(Spring Boot)
4.1 添加依赖(Gradle)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
----------------------
4.2 核心 Controller 示例(支持断点续传)
@RestController
@RequestMapping("/sse")
public class SseController {
private final Map<String, SseEmitter> emitters = new ConcurrentHashMap<>();
@GetMapping("/connect")
public SseEmitter connect(@RequestParam String clientId,
@RequestHeader(value = "Last-Event-ID", required = false) String lastEventId) {
SseEmitter emitter = new SseEmitter(30 * 60 * 1000L); // 设置连接超时 30 分钟
emitters.put(clientId, emitter);
emitter.onTimeout(() -> emitters.remove(clientId));
emitter.onCompletion(() -> emitters.remove(clientId));
if (lastEventId != null) {
System.out.println("客户端希望补发 ID > " + lastEventId + " 的消息");
// TODO: 查询数据库或缓存补发缺失消息
}
return emitter;
}
@PostMapping("/push")
public void push(@RequestParam String clientId, @RequestParam String content) throws IOException {
SseEmitter emitter = emitters.get(clientId);
if (emitter != null) {
String messageId = String.valueOf(System.currentTimeMillis());
emitter.send(SseEmitter.event()
.id(messageId)
.name("message")
.data(content));
}
}
}
----------------------
5. 前端实现(HTML + JS)
使用浏览器原生的
EventSource,自动支持断线重连,支持 Last-Event-ID:<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>SSE 消息接收</title>
</head>
<body>
<h2>实时订单通知</h2>
<ul id="msg-list"></ul>
<script>
const clientId = 'user-001';
function createEventSource(lastEventId = null) {
let url = `/sse/connect?clientId=${clientId}`;
const source = new EventSource(url);
source.onopen = () => console.log("SSE连接已建立");
source.onmessage = (event) => {
console.log("收到消息:", event.data);
const li = document.createElement("li");
li.textContent = `消息(ID: ${event.lastEventId}): ${event.data}`;
document.getElementById("msg-list").appendChild(li);
localStorage.setItem("lastEventId", event.lastEventId);
};
source.onerror = () => {
console.warn("连接断开,准备重连...");
source.close();
const savedId = localStorage.getItem("lastEventId");
setTimeout(() => createEventSource(savedId), 3000);
};
}
createEventSource();
</script>
</body>
</html>
----------------------
6. SSE 核心机制说明
✅️ 自动重连
浏览器原生支持,当连接断开时,每 3 秒自动尝试重连,无需手动干预。
✅️ 消息续发(Last-Event-ID)
每条消息可通过
.id(...) 设置唯一 ID,浏览器自动记住,断线重连后发送请求头 Last-Event-ID,服务端可补发中断期间的消息。✅️ 连接管理建议
● 使用
Map<clientId, SseEmitter> 管理连接● clientId 建议为用户 ID、浏览器 sessionId 等唯一值
● 清理已断开的连接,防止内存泄漏
----------------------
7. SSE 心跳机制(可选)
虽然浏览器会自动维持连接,但为了防止中间网络设备关闭空闲连接,可定期发送空消息:
emitter.send(":\n\n"); // SSE 注释行,作为心跳
建议使用定时任务每 30 秒推送一次。
----------------------
8. 和轮询对比资源消耗
----------------------
9. 总结
✅️ SSE 是一种轻量、简单、易部署的服务端推送方案,适合:
● 单向通知
● 实时状态更新
● 中低频消息推送
相比 WebSocket,SSE 上手更快、兼容性好,尤其适合在已有 Spring Boot 项目中快速集成。
2 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: rupert)
注册Google Cloud Platform迁移是什么意思
求问旧的gcp账号上的300刀是可以迁移到新的未绑卡的gcp账号吗?
2 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: klom klom)
求问旧的gcp账号上的300刀是可以迁移到新的未绑卡的gcp账号吗?
2 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: klom klom)
小朋友在家喜欢看电视和玩电视游戏
我婆娘辞职了,现在在家带娃,每天都会带小朋友出去玩,但是也避免不了看电视。然后我老婆就会开一些比如洪恩识字等VIP 等。 有什么渠道或者其他什么方式可以自己弄一个或者找个便宜的嘛~
看电视的话我寻思可以弄一个APP(APP没弄过但是借助AI应该可以或者H5??电视可以操作H5的嘛?)只连接内网 然后自己开发一个资源网站?/狗头
就是电视里面连接内网->开着电脑开着服务?
5 posts - 3 participants
Read full topic
via LINUX DO - 最新话题 (author: hans hans)
我婆娘辞职了,现在在家带娃,每天都会带小朋友出去玩,但是也避免不了看电视。然后我老婆就会开一些比如洪恩识字等VIP 等。 有什么渠道或者其他什么方式可以自己弄一个或者找个便宜的嘛~
看电视的话我寻思可以弄一个APP(APP没弄过但是借助AI应该可以或者H5??电视可以操作H5的嘛?)只连接内网 然后自己开发一个资源网站?/狗头
就是电视里面连接内网->开着电脑开着服务?
5 posts - 3 participants
Read full topic
via LINUX DO - 最新话题 (author: hans hans)
反重力使用及谷歌家庭组相关问题
问下各位佬,我的谷歌学生认证是美区的,我在使用反重力时,用台湾或者日本的节点可以吗?美区的梯子不是很稳定。还有,谷歌拉家庭组的成员,对梯子有要求吗?+86的号也可以吗?
学生认证来之不易,希望有佬能帮我解答一下,我是真穷怕了
3 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: star_ice_le)
问下各位佬,我的谷歌学生认证是美区的,我在使用反重力时,用台湾或者日本的节点可以吗?美区的梯子不是很稳定。还有,谷歌拉家庭组的成员,对梯子有要求吗?+86的号也可以吗?
学生认证来之不易,希望有佬能帮我解答一下,我是真穷怕了
3 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: star_ice_le)
U是USD还是比特币?
最近想买号,发现都是这个交易单位遂好奇。顺便求几个渠道
13 posts - 13 participants
Read full topic
via LINUX DO - 最新话题 (author: yud25007)
最近想买号,发现都是这个交易单位遂好奇。顺便求几个渠道
13 posts - 13 participants
Read full topic
via LINUX DO - 最新话题 (author: yud25007)
如何使用AI开发一个小程序
老铁们,我是一名后端,我想开发一个小程序应用,如果要先设计界面,我应该使用哪个AI,如果我要写代码应该使用哪个AI,还是说可以直接用 cursor/codex 一把梭。
平时只有AI写后端代码,听群里的大佬们说需要先用 gemini 画图,用 chatgpt 代码架构,佬友们分享一下你们的经验 🫶。
3 posts - 3 participants
Read full topic
via LINUX DO - 最新话题 (author: bigfelo)
老铁们,我是一名后端,我想开发一个小程序应用,如果要先设计界面,我应该使用哪个AI,如果我要写代码应该使用哪个AI,还是说可以直接用 cursor/codex 一把梭。
平时只有AI写后端代码,听群里的大佬们说需要先用 gemini 画图,用 chatgpt 代码架构,佬友们分享一下你们的经验 🫶。
3 posts - 3 participants
Read full topic
via LINUX DO - 最新话题 (author: bigfelo)
安娜档案馆(Anna's Archive) 的.ORG域名被暂停 『转』
torrentfreak.com
Anna's Archive Loses .Org Domain After Surprise Suspension * TorrentFreak
Popular shadow library Anna's Archive has lost control over its main domain name. Annas-archive.org was suspended and put on serverhold status.
Est. reading time: 3 minutes
关于之前注册机构的部分
torrentfreak.com
Domain Registrars and Registries Don't Want to 'Police' Piracy * TorrentFreak
Copyright holders would like domain name registrars and registries to take a more active anti-piracy approach. There was some serious movement in this direction last year when a new copyright arbitration process was proposed that put domains...
Est. reading time: 4 minutes
1 post - 1 participant
Read full topic
via LINUX DO - 最新话题 (author: stevessr)
Invalid media: image
torrentfreak.com
Anna's Archive Loses .Org Domain After Surprise Suspension * TorrentFreak
Popular shadow library Anna's Archive has lost control over its main domain name. Annas-archive.org was suspended and put on serverhold status.
Est. reading time: 3 minutes
关于之前注册机构的部分
torrentfreak.com
Domain Registrars and Registries Don't Want to 'Police' Piracy * TorrentFreak
Copyright holders would like domain name registrars and registries to take a more active anti-piracy approach. There was some serious movement in this direction last year when a new copyright arbitration process was proposed that put domains...
Est. reading time: 4 minutes
该网站的原始域名突然在全球范围内变得无法访问。annas-archive.org 域名状态被更改为“serverHold”,这通常由域名注册局完成。
1 post - 1 participant
Read full topic
via LINUX DO - 最新话题 (author: stevessr)
Invalid media: image
前沿快讯曼联阿莫林下课
水一个快讯
曼联网红队真的是太秀了
曼联球迷都要疯了
16 posts - 11 participants
Read full topic
via LINUX DO - 最新话题 (author: Mci77777)
Invalid media: image
水一个快讯
曼联网红队真的是太秀了
曼联球迷都要疯了
16 posts - 11 participants
Read full topic
via LINUX DO - 最新话题 (author: Mci77777)
Invalid media: image
idea 2025.3和之后版本 中英文注释会出现typo警告
我还以为是我出现幻觉了。。。。之前的版本都正常啊。。。
注释一堆的下划线 搞得我快强迫症了
有老哥提了
https://youtrack.jetbrains.com/projects/IDEA/issues/IDEA-383445/Natural-Languages
底下的回复有点意思
😆
3 posts - 3 participants
Read full topic
via LINUX DO - 最新话题 (author: blacksein)
Invalid media:
image
image
image
image
我还以为是我出现幻觉了。。。。之前的版本都正常啊。。。
注释一堆的下划线 搞得我快强迫症了
有老哥提了
https://youtrack.jetbrains.com/projects/IDEA/issues/IDEA-383445/Natural-Languages
底下的回复有点意思
😆
3 posts - 3 participants
Read full topic
via LINUX DO - 最新话题 (author: blacksein)
Invalid media:
image
image
image
image
【开源自荐】现代化的 RSS 阅读器扩展,支持 AI 智能摘要、自动翻译,让您高效获取信息
因为经常有在PC上看RSS的需求(实际是摸鱼 🤣),但是找来找去,PC上的RSS阅读器要么是太丑,要么是没有AI功能,或者不符合我的使用习惯。
所以基于Fluent Reader二开了一个RSS阅读器。主要增加了AI摘要、AI翻译功能,修复了部分BUG和chrome浏览器插件。
github.com
GitHub - foryoung365/fluent-reader2: Modern desktop RSS reader built with Electron,...
Modern desktop RSS reader built with Electron, React, and Fluent UI
chromewebstore.google.com
MF RSS Reader - Chrome 应用商店
现代化的 RSS 阅读器扩展,支持 AI 智能摘要、自动翻译,让您高效获取信息。
插件同时也发布到了chrome插件商店。欢迎大家试用~
6 posts - 6 participants
Read full topic
via LINUX DO - 最新话题 (author: foryoung365)
Invalid media:
image
image
image
因为经常有在PC上看RSS的需求(实际是摸鱼 🤣),但是找来找去,PC上的RSS阅读器要么是太丑,要么是没有AI功能,或者不符合我的使用习惯。
所以基于Fluent Reader二开了一个RSS阅读器。主要增加了AI摘要、AI翻译功能,修复了部分BUG和chrome浏览器插件。
github.com
GitHub - foryoung365/fluent-reader2: Modern desktop RSS reader built with Electron,...
Modern desktop RSS reader built with Electron, React, and Fluent UI
chromewebstore.google.com
MF RSS Reader - Chrome 应用商店
现代化的 RSS 阅读器扩展,支持 AI 智能摘要、自动翻译,让您高效获取信息。
插件同时也发布到了chrome插件商店。欢迎大家试用~
6 posts - 6 participants
Read full topic
via LINUX DO - 最新话题 (author: foryoung365)
Invalid media:
image
image
image
问问佬友们 python生成图表有没有美化的办法 seaborn 生成的还是太丑
3 posts - 3 participants
Read full topic
via LINUX DO - 最新话题 (author: rcdfrd)
3 posts - 3 participants
Read full topic
via LINUX DO - 最新话题 (author: rcdfrd)
身为"掀桌子"的那位的"老用户",我谈谈它从头到尾干了什么:distorted_face:
一开始,它上线了它的公益站,一天签到50🔪,没有限制死TPM,等于个人用户爽用,我以为是又来一个公益站大佬,在它帖子下面好好的感谢了它 🫡
过了3天,它说公益站下线了,并且清空了关于公益站相关的帖子,佬们都能理解它,毕竟开公益站也要精力的。
但在关站的第二天开始,它悄咪咪的在原来公益站的域名上开了一个商业站,我尝试着注册了一下,也有签到送50🔪,我以为公益站大佬回来了。但后来使用的时候发现TPM限制到了1。好吧,但毕竟还能免费用,我也还是觉得虽然转型成商业站了,但大佬还是很慷慨的。😮
但迷惑行为来了:
昨天下午1点半,它上线了kiro2api渠道
然后第二天就举报了 :distorted_face:
以上就是在我的视角里它做的所有的事情。
身为普通用户,完全没能搞清楚它到底是什么行事逻辑 :distorted_face:哦,我刚上线新渠道,然后砸自己的饭碗 :distorted_face:完全看不懂啊
52 posts - 46 participants
Read full topic
via LINUX DO - 最新话题 (author: yunxi)
Invalid media: image
一开始,它上线了它的公益站,一天签到50🔪,没有限制死TPM,等于个人用户爽用,我以为是又来一个公益站大佬,在它帖子下面好好的感谢了它 🫡
过了3天,它说公益站下线了,并且清空了关于公益站相关的帖子,佬们都能理解它,毕竟开公益站也要精力的。
但在关站的第二天开始,它悄咪咪的在原来公益站的域名上开了一个商业站,我尝试着注册了一下,也有签到送50🔪,我以为公益站大佬回来了。但后来使用的时候发现TPM限制到了1。好吧,但毕竟还能免费用,我也还是觉得虽然转型成商业站了,但大佬还是很慷慨的。😮
但迷惑行为来了:
昨天下午1点半,它上线了kiro2api渠道
然后第二天就举报了 :distorted_face:
以上就是在我的视角里它做的所有的事情。
身为普通用户,完全没能搞清楚它到底是什么行事逻辑 :distorted_face:哦,我刚上线新渠道,然后砸自己的饭碗 :distorted_face:完全看不懂啊
52 posts - 46 participants
Read full topic
via LINUX DO - 最新话题 (author: yunxi)
Invalid media: image
有没有除了海鲜之外推荐卖账号的平台
站里卖学生PRO是违反社区规则的,我看跳蚤市场基本只有TEAM拼车就写了个类似的结果被举报拿下了(下面就是被拿下帖子但是已经不干了)
想问问有没有其他推荐平台?海鲜虽然可以卖的很贵但是那个曝光度和推荐机制搞不懂。而且海鲜太维护卖家利益总是可以退款,我不想售后
有想过要不要搞积分但是积分没试过而且要那多积分也用不出去,现在账号上还有快700用不出去
4 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: 玄 王)
Invalid media: image
站里卖学生PRO是违反社区规则的,我看跳蚤市场基本只有TEAM拼车就写了个类似的结果被举报拿下了(下面就是被拿下帖子但是已经不干了)
想问问有没有其他推荐平台?海鲜虽然可以卖的很贵但是那个曝光度和推荐机制搞不懂。而且海鲜太维护卖家利益总是可以退款,我不想售后
有想过要不要搞积分但是积分没试过而且要那多积分也用不出去,现在账号上还有快700用不出去
4 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: 玄 王)
Invalid media: image
求助 Windows 11 不显示输入法选词框 重启无效
2 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: libai9999)
Invalid media: image
2 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: libai9999)
Invalid media: image
win11窗口阴影bug
有佬知道这个该怎么解决吗,阴影有时候会这样,看网上说是a卡像素格式的问题但改成6/8都还是会有问题,截屏不知道为什么就正常了所以只能拍照了
系统是win11专业工作站25h2,重装电脑后才有的问题,之前相同版本和设备没出现过🤔
2 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: 珞雪)
Invalid media: image
有佬知道这个该怎么解决吗,阴影有时候会这样,看网上说是a卡像素格式的问题但改成6/8都还是会有问题,截屏不知道为什么就正常了所以只能拍照了
系统是win11专业工作站25h2,重装电脑后才有的问题,之前相同版本和设备没出现过🤔
2 posts - 2 participants
Read full topic
via LINUX DO - 最新话题 (author: 珞雪)
Invalid media: image
一直用一个手机注册谷歌账号会有问题吗?
为了实现GCP循环,三个月一注册会产生问题吗?
6 posts - 6 participants
Read full topic
via LINUX DO - 最新话题 (author: Lison)
为了实现GCP循环,三个月一注册会产生问题吗?
6 posts - 6 participants
Read full topic
via LINUX DO - 最新话题 (author: Lison)
为什么充电器显示最大3A,实际功率4A?
红米K40从accubattery上面可以看到充电电流在4A左右
11 posts - 10 participants
Read full topic
via LINUX DO - 最新话题 (author: liuweiqing)
Invalid media:
image
image
红米K40从accubattery上面可以看到充电电流在4A左右
11 posts - 10 participants
Read full topic
via LINUX DO - 最新话题 (author: liuweiqing)
Invalid media:
image
image
Gemini Business 车,两个车齐发
双车有个28车位,需要的可以来~
14 posts - 10 participants
Read full topic
via LINUX DO - 最新话题 (author: 道君 空)
Invalid media: image
双车有个28车位,需要的可以来~
14 posts - 10 participants
Read full topic
via LINUX DO - 最新话题 (author: 道君 空)
Invalid media: image
你正在用的国外高端模型,可能是低端国产!!
今天突发奇想了这个问题,遂找到正在用的ai了一下。
结果当然是我也分不清 🙃
有大佬知道应该怎么真正的识别我现在正在用的模型是什么吗? 🤣
8 posts - 7 participants
Read full topic
via LINUX DO - 最新话题 (author: iwork)
Invalid media:
image
image
image
今天突发奇想了这个问题,遂找到正在用的ai了一下。
结果当然是我也分不清 🙃
有大佬知道应该怎么真正的识别我现在正在用的模型是什么吗? 🤣
8 posts - 7 participants
Read full topic
via LINUX DO - 最新话题 (author: iwork)
Invalid media:
image
image
image