2013-08-20 65 views
1

我的问题是关于Django支持的网站用户之间的实时协作。django实时协作网站

在实践中我需要知道的是,如果有可能实现这样的系统: 1)认为,使用本网站的所有用户都是用户1,用户2,...用户N 2)每次用户之一做一些有趣的事情,通知服务器和其他用户,以便更新 应用程序状态和浏览器ui 3)前一点可以扩展到不仅覆盖用户触发的事件,还覆盖其他更一般的事件,如超时或“每5分钟“或任何你能想象的。

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

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

在此先感谢

我会尽力更好地解释我的问题:我想知道如何发送一个响应用户“弗兰克”时,另一个用户“约翰”做些什么。问题不在于服务器如何向浏览器发送内容,而是如何将john的活动(即点击按钮,更改页面,填写表单)链接到Frank的用户界面而不使用数据库。例如,想想一个简单的聊天页面,当用户输入一些东西时,输入的文本必须推送给所有其他用户:在这种情况下,我不知道如何将动作“John typed something”与动作“send typed text到弗兰克的浏览器“。 memcache解决方案听起来不错,但我想知道是否有其他类似pub-sub或事件系统可用于链接不同用户的连接。

+0

也许'Django'和'Socket.io'? –

+0

不是用于node.js的Socket.io?我更喜欢python解决方案,但可以采取node.js作为最后的手段 – dacanalr

+0

有'django-scoketio' –

回答

0

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

+0

确实的缓存可以帮助不浪费数据库,但不会帮助避免查询系统... – dacanalr

+0

长轮询本身并不坏。根据流星家伙的说法,它比WebSockets更高性能。 – raphonic