How to build a push system in django?

对着背影说爱祢 提交于 2019-11-28 17:16:35
hymloth

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.

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).

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.

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.

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.

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/

Django omnibus

Uses tornado internally and has python 3 support.

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