SSE实时推送订单状态

SSE

SSE是一种基于HTTP长连接的单向通信技术,只能从服务器到客户端。

特点: 自动重连机制,比Websocket轻量,传输格式text。

后端

创建SSEConntroller,需要时GET方法,与前端进行连接
SseEmitter 是 Spring 封装的 SSE 实现,底层遵循 SSE 协议规范

后端创建SseEmitterService,并封装sendMessage方法,订单变化时调用相应方法。

java 复制代码
emitter
.send(SseEmitter.event()
.id(String.valueOf(System.currentTimeMillis()))
.name(eventName)
.data(data));// SSE格式数据携带消息ID、事件名称和消息

前端

前端需要创建一个SSE全局上下文,包括根节点。

在SSE全局上下文中创建JS原生API EventSource ,创建自定义事件监听器对应上面的eventName事件,eventSource.addEventListener(eventName, ...)收取消息。

EventSource

EventSource使用JS的一个原生API,用来订阅SSE流。

只能使用GET请求,且不能携带header,如果为了通过token校验,可以在URL添加参数token。

每次请求浏览器就会记录消息ID,重连时 ,自动在请求头中添加lastEventId,可以通过这个解决断线时消息未提醒问题

使用场景

  1. 实时数据更新
  2. 消息提醒、内容推送
  3. 状态、进度提醒
相关推荐
白狐_79814 分钟前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
流云鹤24 分钟前
03Java学习day(3)
java·学习
tqs_1234528 分钟前
Agent智能体+Skill插件引擎+Milvus混合检索 技术沉淀
java·python·milvus
严同学正在努力1 小时前
从备份到恢复:我用 30 分钟恢复了误删的核心业务表
android·java·数据库·ai
QQ_21696290962 小时前
Spring Boot 养老院管理系统:从入住、护理到费用结算的全流程实现(源码可领)
java·spring boot·后端
cxoptics2 小时前
冰洲石分束器设计与应用
java
ck-joker2 小时前
M1 Pro跑LLM实测:Ollama+LangChain4j零成本本地大模型开发,比云端API快在哪?
java·语言模型
丙氨酸長鏈3 小时前
[Bukkit插件开发]手持发射器箭矢机枪 教学文档 面向Python/C#开发者入门Java与Bukkit API
java·python·c#
Nontee3 小时前
设计模式:模板方法与策略,从“每个字都认识“到能说清它们在干嘛
java·数据库·设计模式
我是唐青枫3 小时前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java·开发语言