Как построить систему push в джанго?
Мне нужно создать систему push в django, в основном ее функция - пересылать сообщения с сервера на браузер.
Поскольку nodejs нельзя использовать, я предпочитаю websocket или orbited, но я не знаю, как реализовать любой из этих двух в django. PLS рекомендуют метод для меня, это поможет мне много, спасибо.
Ответы
Ответ 1
Django не умеет "подталкивать" вещи к клиенту. Если django - ваш единственный вариант, единственный способ имитировать нажатие - это длительный опрос. Но это неэффективно. Вместо этого веб-узлы горячие. Торнадо и скрученный могут помочь вам здесь. Существует также более полный ответ на ваш вопрос здесь.
Ответ 2
Один из вариантов заключается в использовании сервера WebSocket, работающего параллельно с вашим сервером Django, который имеет REST/Push API, а затем выполняет 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).
Ответ 3
Другая реализация websockets в Django:
https://github.com/jonashagstedt/swampdragon
Из документов: SwampDragon использует замечательный ORM Djangos, превосходную поддержку веб-поддержки Tornados (с резервными ошибками, протестирован в IE7) и красную скорость Redis.
Ответ 4
Существует модуль Django, который поддерживает веб-узлы из коробки, используя Redis в качестве очереди сообщений.
Посмотрите здесь: https://github.com/jrief/django-websocket-redis
Отказ от ответственности: я являюсь автором этой библиотеки.
Ответ 5
Как предлагает @hymloth, лучший способ - использовать торнадо или node.js.
Но если вам нужно использовать Django, я написал статью об использовании WebSocket с ней, которая может вам пригодиться.
http://curella.org/blog/2012/jul/17/django-push-using-server-sent-events-and-websocket/
Ответ 6
По состоянию на 2016 год существует Django Channels, который приносит в Django (1,8 и выше) веб-порты.
Это также часть официального проекта Django.
Ответ 7
Django omnibus
Использует торнадо внутри и поддерживает python 3.