Проблема: в отличие от Jakarta WebSockets, Helidon SE 4 не предоставляет для этого никаких механизмов. . WsSession не имеет таких методов, как Session.getUserProperties(), а класс, реализующий WsListener, используется повторно для всех установленных соединений.
Что я пытался сделать: Но каждое соединение WebSocket имеет свой собственный уникальный виртуальный поток.
- Я пытался использовать ThreadLocal для хранить пользовательские данные. Однако это приводит к утечкам памяти, поскольку клиент может закрыть соединение, не уведомив об этом сервер. В результате ни один из методов WsListener никогда не будет вызван из нужного потока, что делает невозможным вызов ThreadLocal.remove() из нужного потока.
< li>Я также пробовал использовать ConcurrentHashMap. Но это вызвало проблемы с производительностью, поскольку все потоки, отвечающие за соединение, вынуждены постоянно ждать друг друга.
Подробнее здесь: https://stackoverflow.com/questions/787 ... elidon-se4
Мобильная версия