2012-06-07 5 views
23

Ho bisogno di creare un sistema push in django, in pratica la sua funzione è quella di inviare messaggi dal server al browser.Come costruire un sistema push in django?

Dato che il nodojs non può essere utilizzato, preferisco websocket o orbited, ma non ho idea di come implementare nessuno di questi due in django. mi raccomando un metodo per me, questo mi aiuterà molto, grazie.

risposta

11

Django non è bravo a "spingere" le cose al cliente. Se django è la tua unica opzione, l'unico modo per simulare una spinta è tramite polling lungo. Ma questo non è efficiente. Invece, le websocket sono calde. Tornado e twistato possono aiutarti qui. C'è anche una risposta più completa alla tua domanda here.

+0

Tutto il mio sito è basato su django e Nginx, quindi immagino che non sia un modo efficiente per usare Tornado o twistato giusto? – Stan666

+0

Perché non efficiente? Dipende dal tuo hardware?Con poco sforzo puoi avere un processo parallelo di tornado che gestisce alcune websocket. – hymloth

+0

Scusa se non ho abbastanza familiarità con il tornado, intendi un server di tornado parallelo al django? Il mio primo pensiero è stato quello di farlo all'interno del Django, visto che c'è django-websocket che non è poi così male. – Stan666

13

Un'opzione consisterebbe nell'utilizzare un server WebSocket in parallelo con il server Django che dispone di un'API REST/Push, quindi eseguire push da Django semplicemente tramite HTTP/POST al server WebSocket, che a sua volta recapita i messaggi a tutti i client WebSocket connessi.

In questo modo, non è necessario apportare modifiche strutturali/tecniche alla tua app Django esistente, tuttavia disporre di una funzionalità push moderna e scalabile basata su WebSocket.

Per un servizio in hosting di cui sopra, darei un'occhiata a http://pusher.com.

Se si preferisce eseguire il proprio, vorrei dare un'occhiata a http://autobahn.ws, che viene distribuito come un dispositivo virtuale pronto per l'esecuzione (VMware, VirtualBox, Amazon EC2). Qui puoi trovare esempi di lavoro di REST/API https://github.com/tavendo/AutobahnPushPython

Disclaimer: Sono autore di Autobahn Open-source e lavoro per Tavendo, che offre Autobahn.ws (l'offerta commerciale basata su OSS Autobahn).

+0

Proverò su AutobahnPushPython, thx :) – Stan666

6

c'è un modulo Django, che supporta WebSockets fuori dalla scatola usando Redis come coda di messaggi. Dai un'occhiata qui: https://github.com/jrief/django-websocket-redis

Disclaimer: Sono l'autore di questa libreria.

+0

Puoi consigliare un esempio minimo? –

+0

@RubberDuck ... Controlla la demo del repository. È abbastanza buono. Puoi controllare la tua installazione: http://django-websocket-redis.readthedocs.org/en/latest/installation.html#check-your-installation Ecco la demo dal vivo: http://websocket.aws.awesto.com/chat/ – nicorellius

9

Un'altra implementazione di WebSockets in Django: https://github.com/jonashagstedt/swampdragon

Da docs: SwampDragon si avvale di Djangos meravigliosa ORM, supporto Tornados eccellente websocket (con fallback testato in IE7.), E Redis velocità incredibile.

4

A partire dal 2016, c'è Django Channels, che porta websockets a Django (1.8 e versioni successive).

È anche part of the official Django project.

+0

Trovato anche un tutorial completo per Django + Channels + React: https://codyparker.com/django-channels-with-react/ – np8