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

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

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

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

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

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

1 Ответ

3 голосов
/ 10 ноября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...