Socket.IO без дублей в multi-worker: как мы приручили realtime
В PDP Mobile чат жильцов с УК должен работать здесь и сейчас — без дублей и магии. Рассказываем, как настроили Socket.IO с Redis-адаптером для синхронизации между воркерами.

В PDP Mobile у нас чат жильцов с УК должен работать здесь и сейчас: сообщения, вложения, всё без магии “ой, два раза отправилось”. Когда бэкенд живёт на нескольких инстансах, это классическая боль distributed systems — особенно сейчас, когда горизонтальное масштабирование уже база, а не “когда-нибудь потом”.
Что сделали: подняли Socket.IO с Redis-адаптером, чтобы события между воркерами синхронизировались и доставка шла ровно один раз. В итоге realtime не разваливается, даже если пользователь попал на другой инстанс.
Из полевых нюансов: — чат работает с вложениями; — для Safari сделали спец-обход: передаём токен в headers, а не через cookie; — при переподключении включили экспоненциальный backoff — до 5 попыток.
Короче, меньше “почему чат молчит?”, больше нормального UX. Redis тут реально как тимлид на созвоне: всех синхронизировал и не дал устроить хаос 😄