9

可以作为 python 包安装的 django 有哪些实时“推送”选项?我想避免做一些事情,比如实时安装独立的网络服务器。

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

此处建议使用 Ape ,但似乎需要您将 Ape 设置为服务器。如果要求不高,是否有任何解决方案可以直接构建到 django 中?

4

3 回答 3

6

自编写答案以来(2012年);很多东西都变了。

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

另一种新兴技术是服务器发送事件,它是W3C 提案草案

swampdragondjango-socketio等项目可以让您在项目中更轻松地集成实时功能。


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

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

好吧,也许是三个组件。

由于 django 不能实时工作,任何提供实时推送/更新的解决方案都需要另一个服务器/服务来接受消息,然后通知侦听器未决消息。

Django 将是在通道(队列/存储桶)上将消息(写入)推送到该服务器的应用程序。侦听器然后订阅一个频道以接收消息通知。由于连接保持打开状态;消息是“实时”检索的。

Django 在所有这一切中确实扮演着最小的角色。有多种实现提供实时通知工作所需的三个组件。

我真的很喜欢juggernaut,因为它设置起来超级简单,并且使用 node.js,在服务器端组件方面不需要太多。我更喜欢它的另一个原因是因为它除了 WebSocket 之外还支持 Adob​​e 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>
于 2012-07-08T06:04:43.743 回答
1

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

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

于 2012-04-09T19:18:03.560 回答
0

您实际上可以从Tornadio2提供 Django ,Tornado 中的 socketio 的工作实现。如果您想在您的实时应用程序中构建任何程度的复杂性,您可能需要一个将会话映射到通道并处理多播的 redis pubsub 后端。为此,您可能想看看Brukva。另请阅读 Yuval Adam关于此主题的博客文章。最后,Tony Abou Assaleh 的示例包帖子将在为 django 设置 Tornadio2 时提供有用的基础参考。

于 2012-07-08T05:34:00.807 回答