Pythonic/ Djangonic способ обработки пользовательских таймаутов в масштабе секунд (или минут, если это необходимо)
Наиболее близким примером для моего случая является приложение ajax-чата Django. В комнатах необходимо вести список активных пользователей. Помимо отображения этого списка пользователей в чате, в данной комнате может быть максимальное количество активных пользователей; новые пользователи должны быть заблокированы от входа, если нет места.
В настоящее время у меня есть страница клиента чата, вызывающая просмотр опроса каждую секунду через ajax. Представление опроса возвращает текст комнаты. Я полагаю, что опрос может также просто выполнить пинг - добавление пользователей в поле active_user M2M объекта Room (пока все это у меня есть). Далее мне нужно что-то, что исключает пользователей из списка active_user после некоторого времени ожидания.
Я полагаю, что есть два способа сделать это, и мне интересно, что было бы более эффективным для приложения, которое должно быть с точностью до секунды (или десять / пятнадцать секунд):
- Использование куки / сессий / промежуточного программного обеспечения а-ля эта тема (однако мне кажется, что этот метод не будет работать для мгновенной информации
- Другая модель, такая как явная таблица Users_Rooms 'through' с полем datetime для времени, которое обновляется при создании, и с каждым последующим пингом, и написание некоторой функции, которая очищает старые
Это все, что я могу придумать. Я просто пытаюсь выяснить, является ли хорошей идеей попадание в каждую секунду для каждого пользователя для каждой комнаты в mySQL, и задаюсь вопросом, действительно ли эта секунда - лучший вариант для этой задачи. Спасибо!
1 ответ
Я бы использовал сеансы и сохранял последний пинг datetime
в качестве параметра сеанса. Не беспокойтесь о попаданиях в базу данных, если в определенный момент вы почувствуете, что получаете слишком много из них, просто переключите хранилище сеанса на кэш.
Сделайте ваше приложение устойчивым к очистке кеша.
Один из моих друзей имел обыкновение размещать относительно популярную игру для социальных сетей на основе django на довольно стандартном виртуальном частном сервере, и потребовалось некоторое время, прежде чем он был вынужден переключиться на сеансы на основе кэша.