【问题标题】:django real time collaborative web sitedjango 实时协作网站
【发布时间】:2013-08-20 20:25:48
【问题描述】:

我的问题是关于 django 驱动的网站中用户之间的实时协作。

在实践中,我需要知道的是是否可以实现这样的系统: 1) 说所有使用网站的用户都是user1, user2, ... userN 2) 每次其中一个用户做一些有趣的事情时通知服务器和其他用户以便更新 应用程序状态和浏览器用户界面 3) 前一点可以扩展到不仅涵盖用户触发的事件,还包括其他更一般的事件,如超时、“每 5 分钟”或您能想象的任何事件。

我知道浏览器到服务器和服务器到浏览器的通信可以通过 ajax(或者像 web-sockets 或 SSE 之类的新东西)来完成,但我不知道的部分是如何 当特定事件发生时通知用户。 想到的唯一(坏)想法是将应用程序数据存储到数据库并在用户执行某项操作时对其进行更新,同时让所有用户从 db 轮询应用程序状态。但我会知道是否有办法避免使用 数据库和轮询系统,换句话说:

当事件 e 被触发 => 发送到所有浏览器“e 触发”

提前致谢

我会尝试更好地解释我的问题:我想知道当另一个用户“John”做某事时如何向用户“Frank”发送响应。问题不在于服务器如何向浏览器发送内容,而是如何在不使用数据库的情况下将 john 的活动(即单击按钮、更改页面、填写表格)链接到 Frank 的 ui。例如,考虑一个简单的聊天页面,当用户键入内容时,必须将键入的文本推送给所有其他用户:在这种情况下,我不知道如何将“John 键入内容”操作与“发送键入的文本”操作链接起来到弗兰克的浏览器”。 memcache 解决方案听起来不错,但我想知道是否有其他东西可以用来链接不同用户的连接。

【问题讨论】:

  • 可能是DjangoSocket.io
  • 不是 Node.js 的 Socket.io 吗?我更喜欢python解决方案,但可以将node.js作为最后的手段
  • django-scoketio
  • @VictorCastilloTorres:那是django-socketio吗?

标签: python django web collaborative


【解决方案1】:

实现缓存(即 memcache)以避免在 Ajax 调用检查更改时访问数据库。如果你想变得花哨,请查看key-based cache expiration 来处理缓存失效。

【讨论】:

  • 当然缓存有助于不浪费数据库,但无助于避免轮询系统...
  • 长轮询本身还不错。根据 Meteor 的说法,它比 WebSockets 更高效。
猜你喜欢
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多