tsurumure il y a 5 mois
Parent
commit
140e3c65b2

+ 9 - 3
src/main/java/com/backendsys/modules/sse/emitter/SseEmitterManager.java

@@ -25,11 +25,11 @@ public class SseEmitterManager {
     public void addEmitter(String emitterKey, SseEmitterUTF8 emitter) {
         this.emitters.put(emitterKey, emitter);
         emitter.onTimeout(() -> {
-            System.out.println("emitter (onTimeout) 超时, emitterKey: " + emitterKey);
+            System.out.println("(onTimeout) emitter 超时, emitterKey: " + emitterKey);
             removeEmitter(emitter);
         });
         emitter.onCompletion(() -> {
-            System.out.println("emitter (onCompletion) 中断, emitterKey: " + emitterKey);
+            System.out.println("(onCompletion) emitter 中断, emitterKey: " + emitterKey);
             removeEmitter(emitter);
         });
     }
@@ -44,7 +44,13 @@ public class SseEmitterManager {
     // 公共方法,供外部移除SseEmitter
     public void removeEmitter(SseEmitterUTF8 emitter) {
         this.emitters.values().removeIf(e -> e == emitter); // 安全移除
-        emitter.complete(); // 显式调用complete方法
+        try {
+            System.out.println("(removeEmitter) emitter 关闭: " + emitter);
+            emitter.complete();
+        } catch (Exception e) {
+            System.err.println("Failed to forcefully close emitter: " + e.getMessage());
+        }
+
     }
     // 公共方法,供外部移除SseEmitter (全部)
     public void removeAllEmitter() {

+ 2 - 2
src/main/java/com/backendsys/modules/sse/utils/SseUtil.java

@@ -107,13 +107,13 @@ public class SseUtil {
                 oldEmitter.send(SseEmitter.event().data(dataStr));
                 oldEmitter.complete();              // 关闭旧的连接
             } catch (IOException e) {
-                System.out.println(e.getMessage());
+                System.out.println("(closeIfExist catch): " + e.getMessage() + oldEmitter);
             } finally {
                 manager.removeEmitter(oldEmitter);  // 从管理器中移除旧的连接
                 // 如果需要,可以在这里显式关闭底层资源
                 if (oldEmitter != null) {
-                    System.out.println("oldEmitter 仍然未关闭");
                     try {
+                        System.out.println("(closeIfExist finally) oldEmitter 关闭");
                         oldEmitter.complete();  // 再次尝试关闭
                     } catch (Exception e) {
                         System.err.println("Failed to forcefully close emitter: " + e.getMessage());