Explorar el Código

优化防止空指针系统崩溃

hubin hace 8 meses
padre
commit
706cfe3fc8

+ 8 - 8
src/main/java/com/aizuda/boot/modules/system/service/impl/SysSSEServiceImpl.java

@@ -31,7 +31,7 @@ public class SysSSEServiceImpl implements ISysSSEService {
     @Override
     public SseEmitter connect() {
         UserSession userSession = UserSession.getLoginInfo();
-        Map<String, SseEmitter> emitters = USER_TOKEN_EMITTERS.computeIfAbsent(userSession.getId(), k -> new ConcurrentHashMap<>());
+        Map<String, SseEmitter> emitters = USER_TOKEN_EMITTERS.computeIfAbsent(userSession.getId(), k -> new HashMap<>());
 
         // 创建一个新的 SseEmitter 实例,默认30秒超时,设置为0L则永不超时
         SseEmitter emitter = new SseEmitter(0L);
@@ -39,15 +39,15 @@ public class SysSSEServiceImpl implements ISysSSEService {
         // 用户会话ID
         String sid = userSession.getSid();
 
-        // 会话关联推送
-        emitters.put(sid, emitter);
+        try {
+            // 会话关联推送
+            emitters.put(sid, emitter);
 
-        // 当 emitter 完成、超时或发生错误时,从映射表中移除对应的会话信息
-        emitter.onCompletion(() -> emitters.remove(sid));
-        emitter.onTimeout(() -> emitters.remove(sid));
-        emitter.onError((e) -> emitters.remove(sid));
+            // 当 emitter 完成、超时或发生错误时,从映射表中移除对应的会话信息
+            emitter.onCompletion(() -> emitters.remove(sid));
+            emitter.onTimeout(() -> emitters.remove(sid));
+            emitter.onError((e) -> emitters.remove(sid));
 
-        try {
             // 向客户端发送一条连接成功的事件
             emitter.send(SseEmitter.event().comment("connected"));
         } catch (IOException e) {