Должен ли я использовать orbited или gevent для интеграции функциональности кометы в приложение django - PullRequest
5 голосов
/ 15 августа 2011

Я работаю с Django уже некоторое время и написал несколько приложений для установки, которая использует Apache 2 mod_wsgi и базу данных PostgreSQL в Ubuntu.

У меня есть приложение, которое использует xsendfile для обслуживания файлов изApache через представление Django, а также позволяет пользователям загружать файлы через форму.Все это прекрасно работает, но теперь я хочу увеличить возможности (и сложность, я уверен), позволяя пользователям общаться в чате и видеть, когда новые файлы были загружены, не обновляя их браузер.

Как я хочуэто масштабируемо, я не хочу постоянно опрашивать с AJAX, так как это будет очень тяжело с большим количеством пользователей.

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

Должен ли я использовать orbited, gevent, iosocket?Где Tornado вписывается в эту дискуссию?

Я хочу, чтобы сообщения также сохранялись в базе данных, поэтому мне нужна какая-либо специальная конфигурация, чтобы предотвратить блокирование моего приложения при записи в базу данных?Повлияет ли работа сервера чата с Django на мою способность обслуживать файлы из Apache?

Ответы [ 2 ]

7 голосов
/ 15 августа 2011

Я бы рекомендовал использовать WebSockets для двунаправленной связи в реальном времени.Продолжайте запускать Django как есть и запускать сервер WebSocket на другом порту.Что касается блокировки вашей базы данных, то вам нужно помнить об этом, когда вы пишете свой сервер WebSocket и либо используете неблокирующий драйвер базы данных, либо обращаетесь к нему каким-либо образом.

На стороне клиентавы захотите использовать Socket.IO или web-socket-js для поддержки резервирования флэш-памяти для старых браузеров, которые не поддерживают флэш-память.

для сервераЛично я склоняюсь к гевенту или торнадо.Для gevent существует gevent-websocket и gevent-socketio , для торнадо вы получаете встроенную поддержку WebSocket и можете использовать tornadio , если хотите использовать Socket.IO. Eventlet и витой оба поддерживают WebSockets.Существует также довольно крутой новый проект под названием autobahn , построенный на витой основе, а meinheld имеет промежуточное программное обеспечение WebSocket, которое вы можете использовать.

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

1 голос
/ 30 июня 2012

Вместо Apache + X-Sendfile вы можете использовать Nginx + X-Accel-Redirect.Таким образом, вы можете запустить сервер gevent / wsgi / django за Nginx с представлениями, обеспечивающими длительный опрос.Нет необходимости в отдельном сервере веб-сокетов.

Я использовал Apache + X-Sendfile и Nginx + X-Accel-Redirect для подачи (защищенного доступа) контента в Webfaction без каких-либо проблем.

...