Pythonic/ Djangonic способ обработки пользовательских таймаутов в масштабе секунд (или минут, если это необходимо)

Наиболее близким примером для моего случая является приложение ajax-чата Django. В комнатах необходимо вести список активных пользователей. Помимо отображения этого списка пользователей в чате, в данной комнате может быть максимальное количество активных пользователей; новые пользователи должны быть заблокированы от входа, если нет места.

В настоящее время у меня есть страница клиента чата, вызывающая просмотр опроса каждую секунду через ajax. Представление опроса возвращает текст комнаты. Я полагаю, что опрос может также просто выполнить пинг - добавление пользователей в поле active_user M2M объекта Room (пока все это у меня есть). Далее мне нужно что-то, что исключает пользователей из списка active_user после некоторого времени ожидания.

Я полагаю, что есть два способа сделать это, и мне интересно, что было бы более эффективным для приложения, которое должно быть с точностью до секунды (или десять / пятнадцать секунд):

  • Использование куки / сессий / промежуточного программного обеспечения а-ля эта тема (однако мне кажется, что этот метод не будет работать для мгновенной информации
  • Другая модель, такая как явная таблица Users_Rooms 'through' с полем datetime для времени, которое обновляется при создании, и с каждым последующим пингом, и написание некоторой функции, которая очищает старые

Это все, что я могу придумать. Я просто пытаюсь выяснить, является ли хорошей идеей попадание в каждую секунду для каждого пользователя для каждой комнаты в mySQL, и задаюсь вопросом, действительно ли эта секунда - лучший вариант для этой задачи. Спасибо!

1 ответ

Решение

Я бы использовал сеансы и сохранял последний пинг datetime в качестве параметра сеанса. Не беспокойтесь о попаданиях в базу данных, если в определенный момент вы почувствуете, что получаете слишком много из них, просто переключите хранилище сеанса на кэш.

Сделайте ваше приложение устойчивым к очистке кеша.

Один из моих друзей имел обыкновение размещать относительно популярную игру для социальных сетей на основе django на довольно стандартном виртуальном частном сервере, и потребовалось некоторое время, прежде чем он был вынужден переключиться на сеансы на основе кэша.

Другие вопросы по тегам