Realtime-сервис на Django Channels: статусы заказов по WebSocket
Статус заказа без перезагрузки: Django Channels, Redis и snapshot при reconnect.
Channels, Django, Redis, WebSocket
Я делал realtime-контур на Django Channels: операторский дашборд и клиентский экран статуса заказа без перезагрузки страницы. Обновления шли по WebSocket, REST оставался для истории и авторизации.
Я поднял ASGI (Daphne/Uvicorn) и channel layer на Redis: события из воркера и из админки публиковались в группы по заказу и по смене. Я написал consumers с проверкой прав на connect — чужой заказ не подписывается даже зная id.
Я закрыл обрывы связи: snapshot состояния при reconnect, heartbeat, бэкпрешер если клиент не успевает. Я не слал персональные поля в общий канал: в сокет уходила минимальная проекция статуса.
Я нагрузил стенд: сотни параллельных соединений, p99 доставки события, рестарт воркера без потери подписок после reconnect. Стек: Django, Channels, Redis, PostgreSQL, Celery, Docker. NDA: сервис не публикуется.