How to build a push system in django?

纵饮孤独 提交于 2019-11-27 10:21:29

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!