Как хранить пользовательские данные для каждого соединения WebSocket в Helidon SE4JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как хранить пользовательские данные для каждого соединения WebSocket в Helidon SE4

Сообщение Anonymous »

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


Подробнее здесь: https://stackoverflow.com/questions/787 ... elidon-se4
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»