【发布时间】:2012-06-11 06:04:43
【问题描述】:
我需要在django中构建一个推送系统,它的基本功能就是将消息从服务器推送到浏览器。
由于不能使用 nodejs,我更喜欢 websocket 或轨道,但我不知道如何在 django 中实现这两个。请为我推荐一种方法,这对我有很大帮助,谢谢。
【问题讨论】:
标签: django websocket push message orbited
我需要在django中构建一个推送系统,它的基本功能就是将消息从服务器推送到浏览器。
由于不能使用 nodejs,我更喜欢 websocket 或轨道,但我不知道如何在 django 中实现这两个。请为我推荐一种方法,这对我有很大帮助,谢谢。
【问题讨论】:
标签: django websocket push message orbited
一种选择是使用与您的 Django 服务器并行运行的 WebSocket 服务器,该服务器具有 REST/Push API,然后通过简单的 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 工作。
【讨论】:
Django 不擅长向客户端“推送”东西。如果 django 是您唯一的选择,那么模拟推送的唯一方法是通过长轮询。但这不是有效的。相反,websockets 很热。龙卷风和扭曲可以在这里为您提供帮助。您的问题here也有更完整的答案。
【讨论】:
Django 中 websockets 的另一种实现: https://github.com/jonashagstedt/swampdragon
来自文档:SwampDragon 利用了 Django 出色的 ORM、Tornados 出色的 websocket 支持(带有回退。在 IE7 中测试)和 Redis 超快的速度。
【讨论】:
截至 2016 年,Django Channels 将 websockets 引入 Django(1.8 及更高版本)。
【讨论】:
有一个 Django 模块,它支持开箱即用的 websockets,使用 Redis 作为消息队列。 看看这里:https://github.com/jrief/django-websocket-redis
免责声明:我是该库的作者。
【讨论】:
正如@hymloth 所建议的,更好的方法是使用 tornado 或 node.js。
但是,如果你必须使用 Django,我写了一篇关于用它实现 WebSocket 的文章,你可能会觉得有用。
http://curella.org/blog/2012/jul/17/django-push-using-server-sent-events-and-websocket/
【讨论】:
在内部使用 tornado 并支持 python 3。
【讨论】: