我需要在django中构建一个推送系统,基本上它的功能是将消息从服务器推送到浏览器。
由于无法使用nodejs,我更喜欢websocket或orbited,但我不知道如何在django中实现这两个中的任何一个。请给我推荐一种方法,这对我很有帮助,谢谢。
答案 0 :(得分:13)
一种选择是使用与Django服务器并行运行的WebSocket服务器,该服务器具有REST / Push API,然后通过简单的HTTP / POST操作从Django推送到WebSocket服务器,后者又将消息传递给所有人连接WebSocket客户端。
这样,您不需要对现有的Django应用程序进行任何结构/技术更改,但仍然具有可扩展的,基于WebSocket的现代推送功能。
对于上面提供的托管服务,我会看一下http://pusher.com。
如果您更喜欢自己运行,我会看一下http://autobahn.ws,它被部署为可立即运行的虚拟设备(VMware,VirtualBox,Amazon EC2)。您可以在https://github.com/tavendo/AutobahnPushPython
找到REST / API的工作示例免责声明:我是Autobahn Open-source的作者,并为Tavendo工作,后者提供Autobahn.ws(基于Autobahn OSS的商业产品)。
答案 1 :(得分:11)
Django不擅长向客户“推送”东西。如果django是你唯一的选择,模仿推送的唯一方法是通过长轮询。但这并不高效。相反,websockets很热。龙卷风和扭曲可以帮助你。您的问题here还有一个更完整的答案。
答案 2 :(得分:9)
Django中websockets的另一个实现: https://github.com/jonashagstedt/swampdragon
来自docs:SwampDragon利用Djangos精彩的ORM,Tornados出色的websocket支持(后备。在IE7中测试),以及Redis超速的速度。
答案 3 :(得分:7)
截至2016年,有Django Channels,它为Django(1.8及更高版本)带来了websockets。
答案 4 :(得分:6)
有一个Django模块,它使用Redis作为消息队列支持开箱即用的websockets。 看看这里:https://github.com/jrief/django-websocket-redis
免责声明:我是该图书馆的作者。
答案 5 :(得分:5)
正如@hymloth所说,更好的方法是使用tornado或node.js。
但是,如果你必须使用Django,我写了一篇关于用它实现WebSocket的文章,你可能觉得它很有用。
http://curella.org/blog/2012/jul/17/django-push-using-server-sent-events-and-websocket/
答案 6 :(得分:1)
在内部使用龙卷风并支持python 3。