Как построить пуш-систему в 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.