diff --git a/src/main/java/com/webgame/webgamebackend/sse/SseConnectionManager.java b/src/main/java/com/webgame/webgamebackend/sse/SseConnectionManager.java index 19f2da8..233005f 100644 --- a/src/main/java/com/webgame/webgamebackend/sse/SseConnectionManager.java +++ b/src/main/java/com/webgame/webgamebackend/sse/SseConnectionManager.java @@ -99,7 +99,11 @@ public class SseConnectionManager { } /** - * 移除连接 + * 移除连接(仅清理内部 Map,不操作 SseEmitter) + * + * SseEmitter 生命周期由 Spring 管理(onCompletion/onTimeout/onError 回调), + * 此方法仅负责从内部映射表中移除引用。不调用 emitter.complete(), + * 避免向已断开的客户端写入数据导致 IOException 扩散到 GlobalExceptionHandler。 * * @param userId 用户账号 ID * @param connectionId 连接 ID @@ -116,11 +120,6 @@ public class SseConnectionManager { } if (removed != null) { - try { - removed.complete(); - } catch (Throwable ignored) { - // 客户端断开后响应可能已不可用 - } log.info("[SSE] 连接已移除, userId={}, connectionId={}, onlineConnections={}", userId, connectionId, getOnlineCount()); }