Клиентский опрос (обратный AJAX) для запросов чата в Django? - PullRequest
0 голосов
/ 25 февраля 2010

Я хочу сделать так, чтобы один пользователь на сайте мог общаться с другим пользователем на моем сайте Django. Я хочу, чтобы запрашиваемый получал ящик в реальном времени, который говорит: «Вы хотите общаться?»

Как звучит следующий опрос клиентов:

user1 нажимает на псевдоним users2, генерируя POST-запрос к некоторым / message / запросы, что создает в базе данных сообщение типа CHAT_REQUEST. Между тем, фрагмент Javascript в браузере user2 неоднократно запрашивает обновления сообщений на сервере. Когда он получает сообщение типа CHAT_REQUEST, он открывает всплывающее окно ...

Проблема с этим подходом, похоже, заключается в доступе к базе данных.

Если клиент опрашивает каждые 10 секунд, и 100 пользователей оставляют открытыми окна браузера, то есть 10 запросов к базе данных в секунду.

Было бы лучше хранить эти сообщения не в базе данных, а в оперативной памяти Django или информации о сеансе? Или эта таблица базы данных будет кэширована в ОЗУ с PostgreSQL, и поиск будет быстрым?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

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

Использование чего-либо вроде memcached или сервера AMQP может повысить производительность. Если вам нравится, вы можете даже использовать более эффективное хранилище ключей-значений, такое как Tokyo Cabinet / Tokyo Tyrant.

1 голос
/ 08 августа 2011

Я предлагаю вам поискать "COMET-подобное" соединение вместо "AJAX-как", если вы беспокоитесь о производительности сервера и использовании полосы пропускания.

Кстати, REDIS выглядит очень хорошо подходящим для обработки такого рода структур данных в памяти.

...