问题
I need to build a push system in django, basicly its function is to push messages from server to browser.
As nodejs cannot be used, i prefer websocket or orbited, but i've no idea how to implement any of these two in django. pls recommend a method for me, this will help me a lot, thx.
回答1:
Django isn't good at "pushing" things to the client. If django is your only option, the only way to mimic a push is via long-polling. But this is not efficient. Instead, websockets are hot. Tornado and twisted can help you here. There is also a more complete answer to your question here.
回答2:
One option would be to use a WebSocket server running parallel to your Django server which has a REST/Push API, and then do pushes from Django by simply HTTP/POSTing to the WebSocket server, which in turn delivers the messages to all connected WebSocket clients.
That way, you don't need any structural/technical changes to your existing Django app, nevertheless have a scalable, modern WebSocket based push feature.
For a hosted service providing above, I'd have a look at http://pusher.com.
If you prefer running your own, I'd have a look at http://autobahn.ws, which is deployed as a ready-to-run virtual appliance (VMware, VirtualBox, Amazon EC2). You can find working examples of REST/API here https://github.com/tavendo/AutobahnPushPython
Disclaimer: I am author of Autobahn Open-source, and work for Tavendo, which offers Autobahn.ws (the commercial offering based on Autobahn OSS).
回答3:
Another implementation of websockets in Django: https://github.com/jonashagstedt/swampdragon
From docs: SwampDragon makes use of Djangos wonderful ORM, Tornados excellent websocket support (with fallback. Tested in IE7), and Redis blazing speed.
回答4:
As of 2016, there is Django Channels, which brings websockets to Django (1.8 and higher).
It is also part of the official Django project.
回答5:
There is a Django module, which supports websockets out of the box using Redis as message queue. Have a look here: https://github.com/jrief/django-websocket-redis
Disclaimer: I am the author of that library.
回答6:
As @hymloth suggests, a better way is to use tornado or node.js.
But, if you have to use Django, I've wrote an article about implementing WebSocket with it that you might find useful.
http://curella.org/blog/2012/jul/17/django-push-using-server-sent-events-and-websocket/
回答7:
Django omnibus
Uses tornado internally and has python 3 support.
来源:https://stackoverflow.com/questions/10927505/how-to-build-a-push-system-in-django