Hello, I’m developing application which uses websockets for chatting feature.

I was wondering what is best way to store all client handles in server side. Every tutorial (eg. this) just says to store in some form of map. I figured that in large commercial apps list of clients would be rather high and I wondered if storing it on heap is actually valid implementation or if some other solutions like caching dbs like redis are used.

What’s your experience with that?

  • RonSijm@programming.dev
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    1 year ago

    Don’t think the size really matters… an IP is 4 bytes, and the port another byte, plus lets say 4 bytes for the UserId. So with some overhead, you can practically put about 100k addresses in 1 MB.

    With that many addresses, you should probably be more concerned about the lookup than the storage. I’d probably put then in a Dictionary[UserId, SocketData].

    Websockets don’t usually stay alive for long periods, so there’s not much point of storing them in a database. Unless you’re building something serverless, but then I wouldn’t build something myself, but just use Firebase Cloud Messaging instead

  • riklaunim@programming.dev
    link
    fedilink
    arrow-up
    1
    arrow-down
    1
    ·
    1 year ago

    Why do you want to store them? I used socket.io in one app and I used channels to manage who gets what but disconnects/reconnects would happen often so I didn’t use the connection directly, but emitting messages to clients currently subscribed to a given channel.

    Agents log into the dashboard - connect and the server subscribes them to the “agents” channel to which ticket list items messages are emitted. Clicks on a ticket - that’s a ticket_id unique channel to which he gets subscribed. Any disconnect/reconnect would create a new connection, the old one is dropped and the agent is once again subscribed to these channels based on where in the dashboard he is in.