可以作为 python 包安装的 django 有哪些实时“推送”选项?我想避免做一些事情,比如实时安装独立的网络服务器。
本质上,我正在寻找类似 pusher.com(云系统)或这个用于 django 的 socket.io 构建(具有构建状态:失败)的东西,用于聊天和其他各种推送操作。
此处建议使用 Ape ,但似乎需要您将 Ape 设置为服务器。如果要求不高,是否有任何解决方案可以直接构建到 django 中?
自编写答案以来(2012年);很多东西都变了。
现在进行系统实时更新的首选方法是使用 websockets;它正在被正式化并作为标准RFC 6455提出。MDN 上的这个页面对这项技术有很好的概述。
swampdragon和django-socketio等项目可以让您在项目中更轻松地集成实时功能。
任何实时系统都有两个主要组件:
好吧,也许是三个组件。
由于 django 不能实时工作,任何提供实时推送/更新的解决方案都需要另一个服务器/服务来接受消息,然后通知侦听器未决消息。
Django 将是在通道(队列/存储桶)上将消息(写入)推送到该服务器的应用程序。侦听器然后订阅一个频道以接收消息通知。由于连接保持打开状态;消息是“实时”检索的。
Django 在所有这一切中确实扮演着最小的角色。有多种实现提供实时通知工作所需的三个组件。
我真的很喜欢juggernaut,因为它设置起来超级简单,并且使用 node.js,在服务器端组件方面不需要太多。我更喜欢它的另一个原因是因为它除了 WebSocket 之外还支持 Adobe Flash Socket(以及其他,请参阅链接)。
访问它的 api 也非常简单——事实上,如果你已经在使用 redis(你真的应该使用它,因为它很容易使用),你不需要另一个 API,因为你可以将消息发送到 redis,juggernaut 会读取它们,或者你可以使用它的 Python API。此烧瓶片段中的一个简单示例:
向通道发送(写入)消息:
>>> from juggernaut import Juggernaut
>>> jug = Juggernaut()
>>> jug.publish('channel', 'The message')
听这个:
<script type=text/javascript
src=http://localhost:8080/application.js></script>
<script type=text/javascript>
var jug = new Juggernaut();
jug.subscribe('channel', function(data) {
alert('Got message: ' + data);
});
</script>
Django 是为网页服务而构建的,在 django 中没有开箱即用的东西来支持 websockets。最快/最简单的选择是 pusher.com(我非常喜欢它)。您可以从 pusher.com 之类的东西开始,如果您围绕它编写一个快速包装器,您可以使用 socket.io 或任何其他 Web 套接字服务器将其替换为您自己的服务器,只需更改包装器/接口以连接到新服务器. 只要确保您编写它时能够随时切换后端即可。
如果你真的想开始运行你自己的套接字服务器,那么有一些项目可以让你在 django 中轻松使用套接字: