sse 实现大屏实时推送的核心是后端按规范返回 text/event-stream 响应(含 content-type、no-cache、keep-alive),前端用 eventsource 连接并监听 message 事件解析 data,自动重连且无需轮询。

JavaScript 本身不负责服务器端推送,它只负责接收和处理。真正的“服务器端推送”由后端实现,前端用 EventSource 建立连接并监听——这是 SSE 工作模式的核心:后端持续写入、前端被动接收。
服务端必须满足三个基础响应要求
无论用 Node.js、Spring Boot 还是 PHP,SSE 接口返回的 HTTP 响应必须严格符合规范:
-
Content-Type 必须设为
text/event-stream -
Cache-Control 必须设为
no-cache(禁用浏览器缓存) -
Connection 推荐设为
keep-alive,并确保响应体不被提前关闭(比如避免res.end()过早调用)
数据格式要按 event-stream 规则分块发送
每条消息以 data: 开头,结尾用两个换行符 \n\n 分隔。支持可选字段如 id:、event:、retry::
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 最简形式:
data: {"cpu": 65, "online": 1204}\n\n - 带 ID 和重连间隔:
id: 12345\nretry: 5000\ndata: {"status": "ok"}\n\n - 多行 data(用于长文本或结构化内容):
data: first line\ndata: second line\n\n
前端用 EventSource 监听并安全更新页面
浏览器原生支持,无需额外库。关键点在于连接管理与 DOM 更新防护:
- 创建连接:
const es = new EventSource('/api/sse/dashboard') - 监听默认消息:
es.onmessage = e => { const data = JSON.parse(e.data); updateUI(data); } - 处理断连:
es.onerror可记录日志;重连由浏览器自动触发(默认约 3 秒),服务端可通过retry:控制间隔 - 防 XSS:
textContent替代innerHTML渲染数值类指标;数字建议用Number(data.value).toFixed(1)格式化
常见陷阱与规避方式
很多 SSE 失败不是代码逻辑问题,而是环境或配置疏漏:
- Nginx/Apache 默认缓冲响应 —— 需禁用:
proxy_buffering off;(Nginx)、SetEnv no-gzip 1(Apache) - PHP 要关输出缓冲:
@ob_end_flush();+flush();+ob_flush(); - HTTPS 环境下,若后端域名与前端不一致,需确保
CORS正确(如 Spring Boot 加@CrossOrigin) - Node.js 中若用 Express,务必调用
res.flushHeaders()确保头部立即发出
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










