web-dev-qa-db-fra.com

Comment construire un système Push dans Django?

Je dois construire un système Push dans Django. Sa fonction consiste essentiellement à envoyer des messages d'un serveur à un navigateur.

Comme nodejs ne peut pas être utilisé, je préfère websocket ou orbited, mais je ne sais pas comment implémenter ces deux logiciels dans Django. les pls recommandent une méthode pour moi, cela m'aidera beaucoup, merci.

23
Stan666

Django n'est pas bon pour "pousser" les choses vers le client. Si Django est votre seule option, le seul moyen d'imiter une Push est d'utiliser une interrogation longue. Mais ce n'est pas efficace. Au lieu de cela, les websockets sont chauds. Tornade et tordu peuvent vous aider ici. Il existe également une réponse plus complète à votre question ici .

11
hymloth

Une option serait d'utiliser un serveur WebSocket fonctionnant parallèlement à votre serveur Django doté d'une API REST/Push, puis d'effectuer des envois depuis Django simplement en HTTP/POST sur le serveur WebSocket, qui à son tour envoie les messages à tous les clients WebSocket connectés. .

Ainsi, vous n'avez besoin d'aucune modification structurelle/technique de votre application Django existante, mais bénéficiez néanmoins d'une fonctionnalité Push évolutive et moderne basée sur WebSocket.

Pour un service hébergé fournissant ci-dessus, je regarderais http://pusher.com .

Si vous préférez utiliser les vôtres, jetez un œil à http://autobahn.ws , qui est déployé en tant qu’appliance virtuelle prête à être utilisée (VMware, VirtualBox, Amazon EC2). Vous pouvez trouver des exemples de travail de REST/API ici https://github.com/tavendo/AutobahnPushPython

Disclaimer: Je suis l'auteur de Autobahn Open-source et travaille pour Tavendo, qui propose Autobahn.ws (l'offre commerciale basée sur Autobahn OSS).

13
oberstet

Une autre implémentation de websockets dans Django: https://github.com/jonashagstedt/swampdragon

D'après les documents: SwampDragon utilise le formidable ORM de Djangos, l'excellent support Websocket de Tornados (avec repli. Testé dans IE7) et la vitesse fulgurante de Redis.

9
potar

À partir de 2016, il existe Django Channels , qui acheminent les websockets vers Django (versions 1.8 et supérieures).

C'est également une partie du projet officiel Django .

7
np8

Il existe un module Django, qui prend en charge les serveurs Web prêts à l'emploi, utilisant Redis comme file d'attente de messages. Consultez ici: https://github.com/jrief/Django-websocket-redis

Disclaimer: Je suis l'auteur de cette bibliothèque.

6
jrief

Comme @hymloth le suggère, un meilleur moyen consiste à utiliser tornado ou node.js.

Mais, si vous devez utiliser Django, j'ai écrit un article sur son implémentation avec WebSocket qui pourrait vous être utile.

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

5
fcurella

Omnibus Django

Utilise tornado en interne et supporte python 3.

1
Ryu_hayabusa