mirror of
https://gitee.com/dromara/RuoYi-Cloud-Plus.git
synced 2025-10-14 14:10:24 +00:00
update 优化 sse 删除之后 手动触发完成 防止内存泄漏
This commit is contained in:
@@ -44,9 +44,24 @@ public class SseEmitterManager {
|
|||||||
emitters.put(token, emitter);
|
emitters.put(token, emitter);
|
||||||
|
|
||||||
// 当 emitter 完成、超时或发生错误时,从映射表中移除对应的 token
|
// 当 emitter 完成、超时或发生错误时,从映射表中移除对应的 token
|
||||||
emitter.onCompletion(() -> emitters.remove(token));
|
emitter.onCompletion(() -> {
|
||||||
emitter.onTimeout(() -> emitters.remove(token));
|
SseEmitter remove = emitters.remove(token);
|
||||||
emitter.onError((e) -> emitters.remove(token));
|
if (remove != null) {
|
||||||
|
remove.complete();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
emitter.onTimeout(() -> {
|
||||||
|
SseEmitter remove = emitters.remove(token);
|
||||||
|
if (remove != null) {
|
||||||
|
remove.complete();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
emitter.onError((e) -> {
|
||||||
|
SseEmitter remove = emitters.remove(token);
|
||||||
|
if (remove != null) {
|
||||||
|
remove.complete();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 向客户端发送一条连接成功的事件
|
// 向客户端发送一条连接成功的事件
|
||||||
@@ -106,7 +121,10 @@ public class SseEmitterManager {
|
|||||||
.name("message")
|
.name("message")
|
||||||
.data(message));
|
.data(message));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
emitters.remove(entry.getKey());
|
SseEmitter remove = emitters.remove(entry.getKey());
|
||||||
|
if (remove != null) {
|
||||||
|
remove.complete();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user