Reputation: 3306
I use websocket-sharp ( https://github.com/sta/websocket-sharp ) (serveur side only).
I can have many clients applications connected to my websocket server. Each client send an ID (let's call it CLIENT_ID
).
I want to know which websocket session is related to CLIENT_ID
.
IWebSocketSession
expose ID
(let's call it SESSION_ID
).
What I have tried:
Firstly I have a storage class which store for each SESSION_ID
his CLIENT_ID
(a simple dictionary).
When I receive a message from a client application, i store SESSION_ID
and CLIENT_ID
in my dictionary.
So when i want to send a message to all sessions having CLIENT_ID == XXX
i can use this dictionary. This works fine ...
BUT sessions are only temporary. A client can use multiple sessions. So for a single client, I will soon have many inputs in my dictionary. When i send a message to all sessions in my dictionnary having CLIENT_ID == XXX
, I will send the same message to the same client multiple time.
My question is : How to register unique clients with websocket-sharp ? Which property should I use ?
Edit : Even with a unique client, every 20s it changes ID of the session. It's probably a new session created for ping.
Upvotes: 4
Views: 6585
Reputation: 3306
Ok as I find nothing, I kept SESSION_ID
but when i register a new item in my dictionary (SESSION_ID
=> CLIENT_ID
) I have to manually delete all "old sessions".
This can be done by checking if session.State == WebSocketState.Open
.
It's not perfect but it works.
Upvotes: 1