2014-11-14 10 views
9

Sto creando un sito Web con Django ora e voglio implementare una funzione di notifica in tempo reale come quella su Facebook o SE.Notifica live/chat in django

Ho fatto qualche ricerca e sembra anche se ci sono due opzioni: ajax lungo polling e websockets, il secondo è la strada da percorrere.

Tuttavia, come sapete, il plug-in per websocket 'socket.io' risulta essere un plugin node.js e la porta django sembra supportare solo python 2 e il progetto sembra praticamente morto. Sto usando python 2.7 come interprete di progetto, ma voglio dimostrarmi in futuro in modo tale che, se eseguo l'aggiornamento a python3 in seguito, non mi ritrovo a non essere in grado di utilizzare questa funzionalità.

Quindi la mia domanda è questa: C'è un modo semplice e futuro per implementare websocket che verrà utilizzato per inviare notifiche live e chat in django env?

risposta

12

Django stesso è costruito in modo bloccante, vale a dire con approccio sincrono. Quindi, tu non puoi aprire websocket persistente con l'applicazione django, poiché bloccherebbe l'intero thread di django.

Se si desidera abilitare la notifica/chat all'interno dell'ambiente del progetto django, si consiglia di utilizzare centrifuge. È scritto in python, ma viene utilizzato il framework asincrono (non bloccante): tornado.

Tuttavia, non è necessario sapere come funziona, poiché fornisce una semplice API REST per comunicare con esso.

flusso di lavoro semplificato, controllare docs per maggiori dettagli:

  1. Inizia centrifuge allo stesso server, in quanto il progetto Django (o su un altro, ma con bassa latenza tra loro)
  2. vostro front-end si aprirà websocket con centrifuga, non con progetto Django.
  3. Quando è necessario inviare una notifica, inviarla per centrifugare da django tramite REST api e la centrifuga la consegnerà ai clienti necessari!

L'ho già provato e funziona!

+1

Questa sembra una soluzione valida. Grazie mille :) – Dan

+0

@stalk: Sembra molto promettente, grazie per questo! Sai se è compatibile con la piattaforma di hosting PaaS come heroku? –

+1

@DavidW. non ho provato, ma secondo [docs] (https://centrifuge.readthedocs.org/en/latest/content/deploy.html#heroku) è possibile eseguire centrifuga su heroku – stalk

0

Django non fornisce quello che stai cercando fuori dalla scatola. Dovrai utilizzare una libreria di terze parti. Uno che funziona attraverso i framework è Pusher.

0

Penso che tu debba andare per Firebase che ti dà una sincronizzazione fantastica e qualsiasi modo di usare la chat su frontend in modo che non debba fare nulla con l'ambiente django in modo da poter aggiornare il tuo backend asincrono in callback con firbase. Firebase con AngularJS ti offre anche un legame a tre vie davvero fantastico.