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