如何在django中构建推送系统?

时间:2012-06-07 07:32:00

标签: django websocket push message orbited

我需要在django中构建一个推送系统,基本上它的功能是将消息从服​​务器推送到浏览器。

由于无法使用nodejs,我更喜欢websocket或orbited,但我不知道如何在django中实现这两个中的任何一个。请给我推荐一种方法,这对我很有帮助,谢谢。

7 个答案:

答案 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。

它也是part of the official Django project

答案 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)

Django omnibus

在内部使用龙卷风并支持python 3。