25

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

由于不能使用 nodejs,我更喜欢 websocket 或轨道,但我不知道如何在 django 中实现这两者。请为我推荐一种方法,这对我有很大帮助,谢谢。

4

7 回答 7

13

一种选择是使用与具有 REST/Push API 的 Django 服务器并行运行的 WebSocket 服务器,然后通过简单的 HTTP/POST 从 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 的作者,并为提供 Autobahn.ws(基于 Autobahn OSS 的商业产品)的 Tavendo 工作。

于 2012-06-07T10:25:33.600 回答
11

Django 不擅长向客户端“推送”东西。如果 django 是您唯一的选择,那么模拟推送的唯一方法是通过长轮询。但这不是有效的。相反,websockets 很热。龙卷风和扭曲可以在这里为您提供帮助。您的问题在这里也有更完整的答案。

于 2012-06-07T08:27:39.853 回答
9

Django 中 websocket 的另一种实现: https ://github.com/jonasagstedt/swampdragon

来自文档:SwampDragon 使用了 Django 出色的 ORM、Tornados 出色的 websocket 支持(带有后备。在 IE7 中测试)和 Redis 极快的速度。

于 2015-01-21T14:26:03.313 回答
9

截至 2016 年,有Django Channels,它将 websockets 引入 Django(1.8 及更高版本)。

它也是官方 Django 项目的一部分

于 2016-11-25T20:26:30.723 回答
6

有一个 Django 模块,它支持开箱即用的 websockets,使用 Redis 作为消息队列。看看这里:https ://github.com/jrief/django-websocket-redis

免责声明:我是该库的作者。

于 2014-01-07T14:39:58.017 回答
5

正如@hymloth 所建议的,更好的方法是使用 tornado 或 node.js。

但是,如果您必须使用 Django,我已经写了一篇关于用它实现 WebSocket 的文章,您可能会发现它很有用。

http://curella.org/blog/2012/jul/17/django-push-using-server-sent-events-and-websocket/

于 2012-07-18T16:15:55.550 回答
1

Django 综合

在内部使用 tornado 并支持 python 3。

于 2015-03-31T16:24:06.253 回答