From b8d9af65e2e60fcfb448d277b0ed3daef9688b2d Mon Sep 17 00:00:00 2001
From: AprilWind <2100166581@qq.com>
Date: 星期五, 09 八月 2024 17:24:44 +0800
Subject: [PATCH] update 增加sse注释说明
---
ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java | 26 ++++++++++++++++++++++++++
ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java | 2 +-
ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java | 25 +++++++++++++++++++++++++
3 files changed, 52 insertions(+), 1 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java
index 91413f1..e5331e4 100644
--- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java
+++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java
@@ -16,6 +16,11 @@
import java.util.List;
+/**
+ * SSE 鎺у埗鍣�
+ *
+ * @author Lion Li
+ */
@RestController
@ConditionalOnProperty(value = "sse.enabled", havingValue = "true")
@RequiredArgsConstructor
@@ -23,6 +28,9 @@
private final SseEmitterManager sseEmitterManager;
+ /**
+ * 寤虹珛 SSE 杩炴帴
+ */
@GetMapping(value = "${sse.path}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter connect() {
String tokenValue = StpUtil.getTokenValue();
@@ -30,6 +38,9 @@
return sseEmitterManager.connect(userId, tokenValue);
}
+ /**
+ * 鍏抽棴 SSE 杩炴帴
+ */
@SaIgnore
@GetMapping(value = "${sse.path}/close")
public R<Void> close() {
@@ -39,6 +50,12 @@
return R.ok();
}
+ /**
+ * 鍚戠壒瀹氱敤鎴峰彂閫佹秷鎭�
+ *
+ * @param userId 鐩爣鐢ㄦ埛鐨� ID
+ * @param msg 瑕佸彂閫佺殑娑堟伅鍐呭
+ */
@GetMapping(value = "${sse.path}/send")
public R<Void> send(Long userId, String msg) {
SseMessageDto dto = new SseMessageDto();
@@ -48,12 +65,20 @@
return R.ok();
}
+ /**
+ * 鍚戞墍鏈夌敤鎴峰彂閫佹秷鎭�
+ *
+ * @param msg 瑕佸彂閫佺殑娑堟伅鍐呭
+ */
@GetMapping(value = "${sse.path}/sendAll")
public R<Void> send(String msg) {
sseEmitterManager.publishAll(msg);
return R.ok();
}
+ /**
+ * 娓呯悊璧勬簮銆傛鏂规硶鐩墠涓嶆墽琛屼换浣曟搷浣滐紝浣嗛伩鍏嶅洜鏈疄鐜拌�屽鑷撮敊璇�
+ */
@Override
public void destroy() throws Exception {
// 閿�姣佹椂涓嶉渶瑕佸仛浠�涔� 姝ゆ柟娉曢伩鍏嶆棤鐢ㄦ搷浣滄姤閿�
diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
index 039e17f..1d37a27 100644
--- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
+++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
@@ -13,8 +13,14 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
+/**
+ * 绠$悊 Server-Sent Events (SSE) 杩炴帴
+ *
+ * @author Lion Li
+ */
@Slf4j
public class SseEmitterManager {
+
/**
* 璁㈤槄鐨勯閬�
*/
@@ -22,24 +28,44 @@
private final static Map<Long, Map<String, SseEmitter>> USER_TOKEN_EMITTERS = new ConcurrentHashMap<>();
+ /**
+ * 寤虹珛涓庢寚瀹氱敤鎴风殑 SSE 杩炴帴
+ *
+ * @param userId 鐢ㄦ埛鐨勫敮涓�鏍囪瘑绗︼紝鐢ㄤ簬鍖哄垎涓嶅悓鐢ㄦ埛鐨勮繛鎺�
+ * @param token 鐢ㄦ埛鐨勫敮涓�浠ょ墝锛岀敤浜庤瘑鍒叿浣撶殑杩炴帴
+ * @return 杩斿洖涓�涓� SseEmitter 瀹炰緥锛屽鎴风鍙互閫氳繃璇ュ疄渚嬫帴鏀� SSE 浜嬩欢
+ */
public SseEmitter connect(Long userId, String token) {
+ // 浠� USER_TOKEN_EMITTERS 涓幏鍙栨垨鍒涘缓褰撳墠鐢ㄦ埛鐨� SseEmitter 鏄犲皠琛紙ConcurrentHashMap锛�
+ // 姣忎釜鐢ㄦ埛鍙互鏈夊涓� SSE 杩炴帴锛岄�氳繃 token 杩涜鍖哄垎
Map<String, SseEmitter> emitters = USER_TOKEN_EMITTERS.computeIfAbsent(userId, k -> new ConcurrentHashMap<>());
+
+ // 鍒涘缓涓�涓柊鐨� SseEmitter 瀹炰緥锛岃秴鏃舵椂闂磋缃负 0 琛ㄧず鏃犻檺鍒�
SseEmitter emitter = new SseEmitter(0L);
emitters.put(token, emitter);
+ // 褰� emitter 瀹屾垚銆佽秴鏃舵垨鍙戠敓閿欒鏃讹紝浠庢槧灏勮〃涓Щ闄ゅ搴旂殑 token
emitter.onCompletion(() -> emitters.remove(token));
emitter.onTimeout(() -> emitters.remove(token));
emitter.onError((e) -> emitters.remove(token));
try {
+ // 鍚戝鎴风鍙戦�佷竴鏉¤繛鎺ユ垚鍔熺殑浜嬩欢
emitter.send(SseEmitter.event().comment("connected"));
} catch (IOException e) {
+ // 濡傛灉鍙戦�佹秷鎭け璐ワ紝鍒欎粠鏄犲皠琛ㄤ腑绉婚櫎 emitter
emitters.remove(token);
}
return emitter;
}
+ /**
+ * 鏂紑鎸囧畾鐢ㄦ埛鐨� SSE 杩炴帴
+ *
+ * @param userId 鐢ㄦ埛鐨勫敮涓�鏍囪瘑绗︼紝鐢ㄤ簬鍖哄垎涓嶅悓鐢ㄦ埛鐨勮繛鎺�
+ * @param token 鐢ㄦ埛鐨勫敮涓�浠ょ墝锛岀敤浜庤瘑鍒叿浣撶殑杩炴帴
+ */
public void disconnect(Long userId, String token) {
Map<String, SseEmitter> emitters = USER_TOKEN_EMITTERS.get(userId);
if (emitters != null) {
diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java
index 4334e98..c6abdc8 100644
--- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java
+++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java
@@ -8,7 +8,7 @@
import org.dromara.common.sse.dto.SseMessageDto;
/**
- * 宸ュ叿绫�
+ * SSE宸ュ叿绫�
*
* @author Lion Li
*/
--
Gitblit v1.9.3