Как спроектировать группу в каналах Django, чтобы 24-часовое время group_expiry не повредило моему общению? - PullRequest
0 голосов
/ 06 сентября 2018

В моей инфраструктуре у меня есть парк устройств RPi, которые подключаются к нашему веб-серверу через веб-сокет. Соединение websocket в идеале всегда остается открытым и действует как канал, по которому сервер может передавать информацию на устройство RPi, а RPi может отправлять информацию обратно на сервер.

Когда устройство RPi подключается к каналам, оно присоединяется к определенной группе на основе конфигурации в полезной нагрузке подключения. Серверу не нужно знать, какие устройства подключены, поскольку он использует ту же эвристику для алгоритмического определения имени группы для отправки информации соответствующим устройствам, если они существуют.

Место, где я уничтожаюсь, это время group_expiry в каналах установлено на 24 часа. Кроме того, таймаут websocket также установлен на 24 часа. Я могу справиться с таймаутом websocket, потому что код JavaScript автоматически попытается переподключиться при необходимости. Однако, когда срок действия группы истекает через 24 часа, мои устройства перестают получать сообщения через группу.

Чистый эффект заключается в том, что каждые 24 часа мне приходится отскакивать от Дафни, чтобы все группы сбрасывались и создавались заново. Ровно через 24 часа Каналы очищают группы, и все снова замирает.

Я смотрел на эту тему: https://github.com/django/channels/issues/999. Я рассмотрел вопрос об увеличении времени ожидания намного выше, но я не знаю, будет ли это иметь какие-либо неблагоприятные последствия для любых других частей инфраструктуры. Группы всегда будут под контролем, и поэтому я не верю, что я действительно получаю выгоду от ведения домашнего хозяйства, которое group_expiry делает для меня.

Существуют ли какие-либо неблагоприятные последствия для поиска способа отключения срока действия группы? Есть ли другой архитектурный подход, который я должен использовать, например, связать дату с именем группы и автоматически создать группы и членство с текущей датой, чтобы группы могли истечь, не прерывая связь? (этот надуманный пример был по общему признанию глупым). Я думаю, что я ищу архитектурный совет.

Возможно, я даже иду по неправильному пути полностью. Думаю, мне следует сначала доказать , что это действительно истечение срока действия группы, которое убивает меня, выясняя, как изменить его на что-то вроде 2 часов, и посмотреть, не выйдет ли сайт.

Вот пакет, в котором обсуждается настройка group_expiry: https://github.com/django/channels_redis

...