任务:有一个使用 Helidon SE4 框架实现的服务器。与服务器的通信是使用WebSocket协议进行的。对于每个新连接,我需要保存用户 ID。当连接关闭时,您需要删除这些数据。
问题:在 Helidon SE4 中,我没有找到任何与 Jakarta WebSockets 中类似的机制。 WsSession 没有类似 的方法Session.getUserProperties(),并且实现类WsListener会被所有已建立的连接重用。
我如何尝试解决这个问题:但是对于每个 WebSocket 连接,都提供了自己独特的虚拟流。
- 我尝试用它
ThreadLocal来存储用户数据。但这会导致内存泄漏,因为......客户端可以在不通知服务器的情况下关闭连接 -> 不会从正确的线程调用任何 WsListener 方法 -> 不可能ThreaLocal.remove()从正确的线程调用。 - 我也尝试使用
ConcurrentHashMap.然而,这导致了性能问题,因为......所有负责连接的线程都被迫不断地相互等待。
