SSE可通过单连接+多event类型实现逻辑多通道:服务端用event:声明类型并严格格式发送,客户端用addEventListener按名监听;避免漏写event:、命名不一致或格式错误;推荐结合BroadcastChannel跨标签页复用连接。

SSE 本身不支持“多通道”这种抽象概念,但可以通过服务端发送不同 event 类型 + 客户端用 addEventListener 分别监听,实现逻辑上的多通道分类监听。关键不是建立多个 EventSource 实例,而是复用一个连接,按事件类型分流处理。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
服务端必须按标准格式发 event 类型
每条消息需以 `event:` 开头声明类型,并紧接 `data:`(中间不能有空行或空格),结尾用两个换行符 `\n\n`。例如:event: user-login
data: {"userId": 101, "name": "Tom"}
event: order-status
data: {"orderId": "ORD-2026", "status": "confirmed"}
event: system-alert
data: {"level": "warning", "msg": "High memory usage"}注意:event: 后的字符串就是客户端监听的事件名,严格区分大小写、不可含空格或特殊符号(推荐用 kebab-case)。
客户端用 addEventListener 按名监听
创建一个 `EventSource` 实例后,对每个关心的事件类型调用 `addEventListener("类型名", handler)` 即可:• 监听 `user-login` 时解析用户数据并更新登录态
• 监听 `order-status` 时刷新订单卡片 UI
• 监听 `system-alert` 时弹出提示框
• 不要监听 `message`,除非你有意兜底处理未声明 event 的消息(这类消息通常说明服务端漏写了 event:)
避免常见错误
• 服务端漏写 `event:` 行 → 该消息只会触发 `message` 事件,不会进入任何自定义监听器
• 客户端监听名和服务端 `event:` 值不完全一致(比如大小写、连字符位置不同)→ 监听失效
• 在 `data:` 前插入空行或注释(如 `: comment`)→ 破坏协议格式,整条消息被忽略
• 响应头缺失 `Content-Type: text/event-stream` 或 `Cache-Control: no-cache` → 连接可能被缓存或拒绝
扩展建议:配合 BroadcastChannel 实现跨标签页统一监听
如果应用打开多个同源标签页,每个页面都建独立 EventSource 会造成冗余连接。更优做法是:• 指定一个“主控页”建立 SSE 连接
• 主控页收到 `user-login`、`order-status` 等事件后,用 `BroadcastChannel` 广播给所有同源页
• 所有页面(包括主控页自身)统一监听 `bc.onmessage`,按 `type` 字段分发处理
• 这样既节省服务器连接数,又保证各页行为一致

















