Как построить пуш-систему в Django?

Мне нужно создать систему push в django, в основном ее функция заключается в передаче сообщений с сервера в браузер.

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

7 ответов

Решение

Джанго не умеет "толкать" вещи клиенту. Если django - ваш единственный вариант, единственный способ имитировать пуш - это длинный опрос. Но это не эффективно. Вместо этого веб-розетки горячие. Торнадо и витой может помочь вам здесь. Здесь также есть более полный ответ на ваш вопрос.

Одним из вариантов может быть использование сервера WebSocket, работающего параллельно вашему серверу Django, имеющего API REST / Push, а затем выполнение запросов из Django путем простой HTTP/POSTing на сервер WebSocket, который в свою очередь доставляет сообщения всем подключенным клиентам WebSocket.,

Таким образом, вам не нужно вносить какие-либо структурные / технические изменения в существующее приложение Django, тем не менее, у вас есть масштабируемая, современная функция push на основе WebSocket.

Для хостинга, предоставляющего услуги выше, я бы посмотрел на http://pusher.com/.

Если вы предпочитаете запускать свой собственный, я бы посмотрел на http://autobahn.ws/, который развернут как готовое к работе виртуальное устройство (VMware, VirtualBox, Amazon EC2). Вы можете найти рабочие примеры REST/API здесь https://github.com/tavendo/AutobahnPushPython

Отказ от ответственности: я являюсь автором Autobahn Open-source и работаю для Tavendo, которая предлагает Autobahn.ws (коммерческое предложение, основанное на Autobahn OSS).

По состоянию на 2016 год, есть каналы Django, которые приносят веб-сокеты в Django (1.8 и выше).

Это также часть официального проекта Django.

Еще одна реализация веб-сокетов в Django: https://github.com/jonashagstedt/swampdragon

Из документации: SwampDragon делает использование Djangos замечательным ORM, превосходной поддержкой веб-сокетов Tornados (с резервным вариантом. Протестировано в IE7) и невероятной скоростью Redis.

Существует модуль Django, который поддерживает веб-сокеты из коробки, используя Redis в качестве очереди сообщений. Посмотрите здесь: https://github.com/jrief/django-websocket-redis

Отказ от ответственности: я являюсь автором этой библиотеки.

Как подсказывает @hymloth, лучше использовать tornado или node.js.

Но, если вам нужно использовать Django, я написал статью о реализации WebSocket, которая может оказаться полезной.

http://curella.org/blog/2012/jul/17/django-push-using-server-sent-events-and-websocket/

Джанго омнибус

Использует торнадо внутри и имеет поддержку Python 3.

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