Живое уведомление / чат в django

Я делаю веб-сайт с django сейчас, и я хочу реализовать функцию живого уведомления, такую как на facebook или SE.

Я сделал некоторые исследования, и кажется, хотя есть два варианта: ajax длинный опрос и websockets, последний путь.

однако, как вы знаете, перейдите к плагину для сокета websocket.io ' оказывается узлом.плагин js и порт django поддерживают только python 2, и проект кажется довольно мертвым. Я использую python 2.7 как мой интерпретатор проекта, но я хочу в будущем доказать себя, так что, если я обновлюсь до python3 позже, я не смогу использовать эту функциональность.

Итак, мой вопрос заключается в следующем: Есть ли прямой и будущий готовый способ реализовать websocket, который будет использоваться для отправки живых уведомлений и чатов в django env?

3 ответов


сам Django строится блокирующим образом, т. е. с синхронно подход. Итак, ты!--4-->не может откройте постоянный websocket с приложением django, так как он заблокирует весь поток django.

Если вы хотите включить уведомление / чат в среде проекта django, я бы рекомендовал использовать центробежка. Он написан на python, но используется асинхронный (неблокирующий) фреймворк:торнадо.

но, вам не нужно даже знайте, как это работает, так как он предоставляет простой REST api для связи с ним.

упрощенный рабочий процесс, проверить docs для получения более подробной информации:

  1. старт centrifuge на том же сервере, что и ваш проект django (или на другом, но с низкой задержкой между ними)
  2. ваш передний конец откроет websocket с центрифугой, а не с проектом django.
  3. когда вам нужно отправить уведомление, отправьте его в центрифугу из django через REST api и центрифуга доставит его нужным клиентам!

Я уже пробовал, и это работает!


Django не предоставляет то, что вы ищете из коробки. Вам придется использовать стороннюю библиотеку. Тот, который работает через фреймворки, -толкатель.


Я думаю, вы должны пойти на Firebase это дает вам удивительную синхронизацию и любой, как вы собираетесь использовать чат на интерфейсе, поэтому его не нужно ничего делать с средой django, чтобы вы могли обновить бэкэнд asynchron в обратном вызове с firbase. Также firebase с AngularJS предоставляет вам действительно потрясающую трехстороннюю привязку.