本文档记录了对该模块代码实现中发现的问题。
WebSocketUserConnectionManager.java内存泄漏潜在风险 (lines 24, 30, 36):java private static ConcurrentHashMap<Long, ConcurrentHashMap<Long, Session>> userConnections = ... private static ConcurrentHashMap<String, Long> sessionIdUserIdMap = ... private static ConcurrentHashMap<Long, Session> sessionIdSessionMap = ...
- 所有连接 map 都是 static
- 即使组件被重新加载(例如开发环境热重载),static map 仍然保持对所有 session 的引用
- 会导致内存泄漏,因为 session 无法被 GC
- 应该使用实例字段而不是 static
PushMessageWebSocketHandler.java1. 连接建立时缺少认证:
- 连接立即建立,认证在之后通过认证消息进行
- 如果认证永远不会发生或失败,连接仍然保持打开
- 会导致半开放连接累积,占用资源
2. 异常吞掉 (line 74-77):java } catch (Exception e) { // treat as plain text }
- 捕获解析 JSON 时的任何异常,当作普通文本处理
- 这会吞掉真正的处理异常,应该适当处理