this post was submitted on 08 Oct 2023
6 points (87.5% liked)

Web Development

3434 readers
1 users here now

Welcome to the web development community! This is a place to post, discuss, get help about, etc. anything related to web development

What is web development?

Web development is the process of creating websites or web applications

Rules/Guidelines

Related Communities

Wormhole

Some webdev blogsNot sure what to post in here? Want some web development related things to read?

Heres a couple blogs that have web development related content

CreditsIcon base by Delapouite under CC BY 3.0 with modifications to add a gradient

founded 1 year ago
MODERATORS
 

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?

top 4 comments
sorted by: hot top controversial new old
[–] [email protected] 4 points 1 year ago

Don't overthink it. 100mb of RAM will get you something like half a million clients.

[–] [email protected] 2 points 1 year ago* (last edited 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

[–] [email protected] 0 points 1 year ago (1 children)

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.

[–] [email protected] 1 points 1 year ago

Socket.io is abstracting away the client connection details, so is doing the storage itself.

Socket.io might not be available for the chosen language, socket.io might not be suitable for the project, some people want to develop things themselves.