什么是django可以作为python包安装的实时“推送”选项?我想避免不必像实时安装独立的Web服务器那样。
基本上我正在寻找像pusher.com(云系统)或this socket.io build这样的django(具有构建状态:失败)用于聊天和其他各种推送操作。
Ape被建议here,但似乎需要您将Ape设置为服务器。如果它没有太多要求,是否有任何解决方案可以直接进入django?
答案 0 :(得分:6)
答案撰写时间(2012年);很多都改变了。
现在对系统进行实时更新的首选方法是使用websockets;正在形式化并提议作为标准RFC 6455。 This page on MDN对该技术有很好的概述。
另一项新兴技术是Server Sent Events,即W3C draft proposal。
swampdragon和django-socketio等项目可让您在项目中更轻松地集成实时功能。
任何实时系统都有两个主要组件:
好的,也许是三个组成部分。
由于django不能实时工作,任何提供实时推送/更新的解决方案都需要另一台服务器/服务接受消息,然后通知侦听器未决消息。
Django将是在通道(队列/存储桶)上将消息(写入)推送到此服务器的应用程序。然后,监听器订阅要通知消息的频道。由于连接保持打开;消息以“实时”方式检索。
Django在所有这些方面确实扮演了最小的角色。有各种实现提供实时通知工作所需的三个组件。
我非常喜欢juggernaut,因为它设置起来非常简单,并且使用的node.js在服务器端组件方面并不需要太多。我更喜欢它的另一个原因是它支持Adobe Flash Socket以及WebSocket(以及其他人,请参阅链接)。
访问它的api也非常简单 - 事实上,如果你已经在使用redis(你应该从so easy to use开始就应该这样做),你不需要另外的API,因为你可以将消息丢给redis和juggernaut会读取它们,或者你可以使用它的Python API。这个flask snippet的一个简单例子:
向频道发送(写入)消息:
>>> 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>
答案 1 :(得分:1)
Django是为了提供网页服务而设计的,没有任何东西可以支持django中的websockets。最快/最简单的选择是pusher.com(我真的喜欢它)。你可以从像pusher.com这样的东西开始,如果你在它周围编写一个快速包装器,只需更改包装器/接口以连接到新服务器,就可以使用socket.io或任何其他Web套接字服务器将它替换为您自己的服务器。 。只要确保你能够在任何时候切换后端来编写它。
如果你真的想开始运行自己的套接字服务器,那里有项目可以很容易地在django中使用套接字:
答案 2 :(得分:0)
你实际上可以从Tornadio2提供Django,这是Tornado中socketio的一个有效实现。如果你想在你的实时应用程序中构建任何程度的复杂性,你可能需要一个redis pubsub后端,它将会话映射到频道并处理多播。为此,您可以查看Brukva。还阅读了Yuval Adam关于这个主题的blog post。最后,Tony Abou Assaleh的sample package和post将在为django设置tornadio2时提供有用的基础参考。