|
@@ -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) {
|