mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-12 21:49:01 +08:00
refactor(sse): 优化 SseEmitterEndpoint 确保在 onCompletion、onTimeout 和 onError 时清理 SseEmitter。
同时,将 `SecurityUtils.getUser().getId()` 提取为局部变量 `userId`,减少重复代码。 在 `SseEmitterHolder` 中,修改了 `removeSseEmitter` 方法的参数类型和实现,使其直接通过 `SseEmitter` 对象进行删除,提升代码可读性和维护性。 此外,移除了 `SseEmitterMessageSender` 中未使用的 `ReflectUtil` 导入,保持代码简洁。
This commit is contained in:
1 parent
b4f1b0c3c4
commit
7f740d9828
3 files changed
+15
-8
No files matched your search
+12
-4
@@ -30,17 +30,25 @@ public class SseEmitterEndpoint {
|
||||
log.debug("MSG: SseConnectError");
|
||||
return null;
|
||||
}
|
||||
|
||||
Long userId = SecurityUtils.getUser().getId();
|
||||
log.info("MSG: SseConnect | EmitterHash: {} | ID: {}", sseEmitter.hashCode(), SecurityUtils.getUser().getId());
|
||||
sseEmitter.onCompletion(() -> {
|
||||
log.info("MSG: SseConnectCompletion | EmitterHash: {} |ID: {}", sseEmitter.hashCode(), SecurityUtils.getUser().getId());
|
||||
log.info("MSG: SseConnectCompletion | EmitterHash: {} |ID: {}", sseEmitter.hashCode(),
|
||||
SecurityUtils.getUser().getId());
|
||||
SseEmitterHolder.removeSseEmitter(sseEmitter);
|
||||
});
|
||||
sseEmitter.onTimeout(() -> {
|
||||
log.error("MSG: SseConnectTimeout | EmitterHash: {} |ID: {} ", sseEmitter.hashCode(), SecurityUtils.getUser().getId());
|
||||
log.error("MSG: SseConnectTimeout | EmitterHash: {} |ID: {} ", sseEmitter.hashCode(),
|
||||
SecurityUtils.getUser().getId());
|
||||
SseEmitterHolder.removeSseEmitter(sseEmitter);
|
||||
});
|
||||
sseEmitter.onError(t -> {
|
||||
log.error("MSG: SseConnectError | EmitterHash: {} |ID: {}", sseEmitter.hashCode(), SecurityUtils.getUser().getId());
|
||||
log.error("MSG: SseConnectError | EmitterHash: {} |ID: {}", sseEmitter.hashCode(),
|
||||
SecurityUtils.getUser().getId());
|
||||
SseEmitterHolder.removeSseEmitter(sseEmitter);
|
||||
});
|
||||
SseEmitterHolder.addSseEmitter(SecurityUtils.getUser().getId(), sseEmitter);
|
||||
SseEmitterHolder.addSseEmitter(userId, sseEmitter);
|
||||
sseEmitter.send("pong");
|
||||
return sseEmitter;
|
||||
}
|
||||
|
||||
-1
@@ -1,6 +1,5 @@
|
||||
package com.pig4cloud.pigx.common.sse.config;
|
||||
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import com.pig4cloud.pigx.common.sse.holder.SseEmitterHolder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
||||
|
||||
+3
-3
@@ -31,10 +31,10 @@ public final class SseEmitterHolder {
|
||||
|
||||
/**
|
||||
* 删除一个 sseEmitter
|
||||
* @param sseEmitterKey sseEmitter唯一标识
|
||||
* @param sseEmitter SseEmitter
|
||||
*/
|
||||
public static void removeSseEmitter(Object sseEmitterKey) {
|
||||
USER_SSE_EMITTER_MAP.remove(sseEmitterKey.toString());
|
||||
public static void removeSseEmitter(SseEmitter sseEmitter) {
|
||||
USER_SSE_EMITTER_MAP.values().remove(sseEmitter);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user