WebSocket Without Surprises: Socket.IO + Redis in Multi-Worker
At PDP Mobile, we set up Socket.IO with a Redis adapter so the chat between residents and the property management company works across multiple instances without duplicates and with messages delivered exactly once.

In PDP Mobile, we set up Socket.IO with a Redis adapter so the chat between residents and the property management company would not fall apart when the backend runs in multiple instances. The main goal was exactly-once message delivery: no duplicates, no “oops, I got the same thing twice.”
The chat works in real time, and it also supports attachments — because sometimes words are not enough, and you need a meme… or rather a photo of the issue 😅
A separate challenge was Safari. For it, we added a workaround: we pass the token in headers instead of through cookies. And yes, we did not leave reconnection to chance either: we configured exponential backoff with a limit of up to 5 attempts.
Against the backdrop of the usual hype around real-time and scaling, this is table stakes for production. We like that: less magic, more predictability.