Django的实时选项(Websockets,flash,polling)?

Nov*_*ing 9 python django real-time websocket

什么是django的实时"推"选项,可以作为python包安装?我想避免不必像实时安装独立的Web服务器那样.

基本上我正在寻找像pusher.com(云系统)或者这个用于聊天和其他各种推送操作的django(具有构建状态:失败)的socket.io构建.

这里建议使用Ape ,但似乎需要将Ape设置为服务器.如果它没有太多要求,是否有任何解决方案可以直接进入django?

Bur*_*lid 6

自答案撰写时间(2012年); 很多都改变了.

现在对系统进行实时更新的首选方法是使用websockets; 正在形式化并提议作为标准RFC 6455.MDN上的这个页面对该技术有很好的概述.

另一项新兴技术是服务器发送事件,这是W3C草案提案.

项目如swampdragonDjango的socketio在您的项目中整合实时功能更容易.


任何实时系统都有两个主要组件:

  1. 从浏览器到服务器保持打开的连接.
  2. 侦听此连接然后响应的服务器.
  3. 用于存储和通知消息的系统/标准.

好的,也许是三个组成部分.

由于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')
Run Code Online (Sandbox Code Playgroud)

听这个:

<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>
Run Code Online (Sandbox Code Playgroud)


haz*_*mat 1

Django 是为提供网页服务而构建的,并且 Django 中没有任何现成的东西可以支持 websocket。最快/最简单的选择是pusher.com(我非常喜欢它)。您可以从像 Pusher.com 这样的东西开始,如果您围绕它编写一个快速包装器,您可以使用 socket.io 或任何其他 Web 套接字服务器将其替换为您自己的服务器,只需更改包装器/接口以连接到新服务器。只要确保你编写的代码能够随时切换后端即可。

如果您确实想开始运行自己的套接字服务器,那么有一些项目可以让您轻松地在 django 中使用套接字: