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. 状态、进度提醒
相关推荐
超级大只老咪7 小时前
数组相邻元素比较的循环条件(Java竞赛考点)
java
小浣熊熊熊熊熊熊熊丶7 小时前
《Effective Java》第25条:限制源文件为单个顶级类
java·开发语言·effective java
毕设源码-钟学长7 小时前
【开题答辩全过程】以 公交管理系统为例,包含答辩的问题和答案
java·eclipse
啃火龙果的兔子7 小时前
JDK 安装配置
java·开发语言
星哥说事7 小时前
应用程序监控:Java 与 Web 应用的实践
java·开发语言
派大鑫wink7 小时前
【JAVA学习日志】SpringBoot 参数配置:从基础到实战,解锁灵活配置新姿势
java·spring boot·后端
xUxIAOrUIII8 小时前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home8 小时前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法
醇氧8 小时前
org.jetbrains.annotations的@Nullable 学习
java·开发语言·学习·intellij-idea
Java&Develop8 小时前
Aes加密 GCM java
java·开发语言·python