|
@@ -25,11 +25,11 @@ public class SseEmitterManager {
|
|
public void addEmitter(String emitterKey, SseEmitterUTF8 emitter) {
|
|
public void addEmitter(String emitterKey, SseEmitterUTF8 emitter) {
|
|
this.emitters.put(emitterKey, emitter);
|
|
this.emitters.put(emitterKey, emitter);
|
|
emitter.onTimeout(() -> {
|
|
emitter.onTimeout(() -> {
|
|
- System.out.println("emitter (onTimeout) 超时, emitterKey: " + emitterKey);
|
|
|
|
|
|
+ System.out.println("(onTimeout) emitter 超时, emitterKey: " + emitterKey);
|
|
removeEmitter(emitter);
|
|
removeEmitter(emitter);
|
|
});
|
|
});
|
|
emitter.onCompletion(() -> {
|
|
emitter.onCompletion(() -> {
|
|
- System.out.println("emitter (onCompletion) 中断, emitterKey: " + emitterKey);
|
|
|
|
|
|
+ System.out.println("(onCompletion) emitter 中断, emitterKey: " + emitterKey);
|
|
removeEmitter(emitter);
|
|
removeEmitter(emitter);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
@@ -44,7 +44,13 @@ public class SseEmitterManager {
|
|
// 公共方法,供外部移除SseEmitter
|
|
// 公共方法,供外部移除SseEmitter
|
|
public void removeEmitter(SseEmitterUTF8 emitter) {
|
|
public void removeEmitter(SseEmitterUTF8 emitter) {
|
|
this.emitters.values().removeIf(e -> e == 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 (全部)
|
|
// 公共方法,供外部移除SseEmitter (全部)
|
|
public void removeAllEmitter() {
|
|
public void removeAllEmitter() {
|