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