docs(chat): 在线/离线实时SSE已上线(22_4223 §12, presence事件, #4273 PR#4299)
这个提交包含在:
父节点
79468ab61f
当前提交
bfa877f3db
@ -116,7 +116,20 @@ HOUSE 订单会话**只走 open-house**。通用 `/chat/open`(bizModule+peerAd
|
||||
|
||||
### 在线/离线态走 SSE(wx 2026-06-23 新要求 → 后端工单 **#4273**)
|
||||
- 现状:`peerOnline` 是**轮询字段**(Redis presence key TTL 45s + SSE 心跳续期),**在线态变更不推送**。
|
||||
- wx 拍:改为 **SSE 实时推在线/离线**。已立后端工单 **#4273**(hl-user-service):SSE 连接建/断 → 标在线/离线 → 向会话对端推 `presence` 事件。**前端届时订阅 presence 事件、停 peerOnline 轮询**(保留字段做首屏兜底)。未落地前先用 peerOnline 轮询。
|
||||
- wx 拍:改为 **SSE 实时推在线/离线**。已立后端工单 **#4273**(hl-user-service):SSE 连接建/断 → 标在线/离线 → 向会话对端推 `presence` 事件。**前端届时订阅 presence 事件、停 peerOnline 轮询**(保留字段做首屏兜底)。**✅ 已上线测试服,契约见 §12。**
|
||||
|
||||
---
|
||||
|
||||
## 12. ✅ 在线/离线实时 SSE 已上线测试服(2026-06-23 · #4273 · PR #4299 · 已部署实测)
|
||||
|
||||
`peerOnline` 轮询升级为 **SSE 实时推**。前端订阅后**在线点变更实时刷新,停掉 peerOnline 轮询**(`peerOnline` 仅留作首屏兜底)。
|
||||
|
||||
- **SSE 事件**:`presence`(与 `im-chat`/`im-chat-read` 同一条流 `GET /ws/admin-msg/stream`,实测 200 `text/event-stream`)。
|
||||
- **payload**:`{ "type":"PRESENCE", "presenceAdminId":<Long 在线态翻转的人>, "online":<Boolean> }`(另带 `adminId`=收件方路由,前端忽略)。
|
||||
- **语义**:当**与你有活跃会话的某对端**(`presenceAdminId`)上线/下线,你的流就收到一条 `presence` → 把会话列表 / 打开的聊天里**那个人的在线点**实时刷成 `online`。只推「与你有会话关系的人」,不会广播无关员工。
|
||||
- **前端**:订阅 `presence` 事件 → `presenceAdminId` 找到对应会话/对端 → 设其在线点=`online`。首屏仍用 `peerOnline`(open-house / conversations 返)兜底,之后全靠 `presence` 事件维持,**不再轮询**。
|
||||
- **时延**:上线≈即时(建连即推);下线干净断开≈即时、异常掉线≤25s(心跳探测补推)、45s TTL 兜底。
|
||||
- **实测**:部署后 `GET /ws/admin-msg/stream` 200 + `text/event-stream`,服务正常启动(新 presence 广播 bean 无循环依赖)。两端实时翻态属前端联调验。
|
||||
|
||||
---
|
||||
|
||||
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户