update 优化 sse 心跳检测写法

This commit is contained in:
lilinxiang 2025-10-16 16:11:49 +08:00
parent 9ba0b0ef69
commit 40e13ce136

View File

@ -116,24 +116,19 @@ public class SseEmitterManager {
* SSE心跳检测关闭无效连接 * SSE心跳检测关闭无效连接
*/ */
public void sseMonitor() { public void sseMonitor() {
log.info("开始执行 SSE 心跳检测"); log.info("开始 SSE 心跳");
for (Map.Entry<Long, Map<String, SseEmitter>> userEmitters : USER_TOKEN_EMITTERS.entrySet()) { USER_TOKEN_EMITTERS.forEach((userId, map) ->
Map<String, SseEmitter> emitters = userEmitters.getValue(); map.entrySet().removeIf(e -> {
if (MapUtil.isNotEmpty(emitters)) {
for (Map.Entry<String, SseEmitter> entry : emitters.entrySet()) {
try { try {
// 向客户端发送心跳 e.getValue().send(SseEmitter.event().comment("heartbeat"));
entry.getValue().send(SseEmitter.event().comment("heartbeat")); return false;
} catch (Exception e) { } catch (Exception ex) {
log.warn("心跳发送失败, 关闭连接: userId={}, token={}", userEmitters.getKey(), entry.getKey()); log.warn("心跳失败,移除连接: userId={}, token={}", userId, e.getKey());
SseEmitter remove = emitters.remove(entry.getKey()); e.getValue().complete();
if (remove != null) { return true;
remove.complete();
}
}
}
}
} }
})
);
} }
/** /**