C# Websocket-Sharp — как идентифицировать клиентов

Я использую websocket-sharp ( https://github.com/sta/websocket-sharp) ( только со стороны сервера).

У меня может быть много клиентских приложений, подключенных к моему серверу веб-сокетов. Каждый клиент отправляет идентификатор (назовем его CLIENT_ID).

Я хочу знать, какой сеанс веб-сокета связан с CLIENT_ID.

IWebSocketSession выставить ID (назовем его SESSION_ID).

Что я пробовал:

Во-первых, у меня есть класс хранения, который хранит для каждого SESSION_ID его CLIENT_ID (простой словарь).

Когда я получаю сообщение от клиентского приложения, я сохраняю SESSION_ID и CLIENT_ID в своем словаре.

Поэтому, когда я хочу отправить сообщение всем сеансам, имеющим CLIENT_ID == XXX, я могу использовать этот словарь. Это отлично работает...

НО сеансы являются временными. Клиент может использовать несколько сеансов. Так что для одного клиента у меня скоро будет много входных данных в моем словаре. Когда я отправлю сообщение всем сеансам в моем словаре с CLIENT_ID == XXX, я отправлю одно и то же сообщение одному и тому же клиенту несколько раз.

Мой вопрос: Как зарегистрировать уникальных клиентов с помощью websocket-sharp? Какое свойство следует использовать?

Редактировать: даже с уникальным клиентом каждые 20 секунд он меняет идентификатор сеанса. Вероятно, это новая сессия, созданная для проверки связи.


person antoinestv    schedule 29.04.2015    source источник


Ответы (1)


Хорошо, поскольку я ничего не нахожу, я сохранил SESSION_ID, но когда я регистрирую новый элемент в своем словаре (SESSION_ID => CLIENT_ID), мне приходится вручную удалять все «старые сеансы».

Это можно сделать, проверив, если session.State == WebSocketState.Open.

Это не идеально, но это работает.

person antoinestv    schedule 29.04.2015