From 7f740d9828b9df8c6c0cd63247611d017b3383cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= <2270033969@qq.com> Date: Tue, 4 Mar 2025 08:55:13 +0800 Subject: [PATCH] =?UTF-8?q?refactor(sse):=20=E4=BC=98=E5=8C=96=20`SseEmitt?= =?UTF-8?q?erEndpoint`=20=E7=A1=AE=E4=BF=9D=E5=9C=A8=20`onCompletion`?= =?UTF-8?q?=E3=80=81`onTimeout`=20=E5=92=8C=20`onError`=20=E6=97=B6?= =?UTF-8?q?=E6=B8=85=E7=90=86=20`SseEmitter`=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同时,将 `SecurityUtils.getUser().getId()` 提取为局部变量 `userId`,减少重复代码。 在 `SseEmitterHolder` 中,修改了 `removeSseEmitter` 方法的参数类型和实现,使其直接通过 `SseEmitter` 对象进行删除,提升代码可读性和维护性。 此外,移除了 `SseEmitterMessageSender` 中未使用的 `ReflectUtil` 导入,保持代码简洁。 --- .../common/sse/config/SseEmitterEndpoint.java | 16 ++++++++++++---- .../sse/config/SseEmitterMessageSender.java | 1 - .../pigx/common/sse/holder/SseEmitterHolder.java | 6 +++--- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterEndpoint.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterEndpoint.java index 397a81f1f..e68e520b0 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterEndpoint.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterEndpoint.java @@ -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; } diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterMessageSender.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterMessageSender.java index cee119b5d..15e248eeb 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterMessageSender.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterMessageSender.java @@ -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; diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/holder/SseEmitterHolder.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/holder/SseEmitterHolder.java index 67f9c32fc..77faed9d2 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/holder/SseEmitterHolder.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/holder/SseEmitterHolder.java @@ -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); } /**