antoinestv
antoinestv

Reputation: 3306

C# Websocket-Sharp - how to identify clients

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

Answers (1)

antoinestv
antoinestv

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

Related Questions