如何进行类似于Google文档的实时更新?

时间:2010-09-10 17:58:24

标签: ajax web-applications live-update

我想做一些非常类似于Google Doc的实时更新的内容 - 所有用户都可以“立即”查看文档中其他用户的操作。

为实现这一目标,我的想法到目前为止:

  • 连续的AJAX请求在后台完成(这看起来似乎是性能密集型的)?
  • 当然,服务器无法将通知推送到其所有客户端并相应地更新它们?
  • AJAX每隔X秒请求一次缓冲/延时动作在X秒内完成(模拟实时效果)?

我想知道其他人尝试达到这种效果的经验。这样做的最佳方式是什么?

感谢所有帮助。

注意:我并不是专门寻找实时文档编辑解决方案。我正在寻找一个解决谷歌与他们的文档相同的概念的解决方案。我实际上会以稍微不同的方式使用该解决方案。

11 个答案:

答案 0 :(得分:12)

我投票支持Long-poll策略:每个客户端都会向服务器打开一个请求,但服务器永远不会断开连接,只是不时地发送一些java脚本。

常量AJAX请求会终止您的服务器。

答案 1 :(得分:8)

结帐google mobwrite。它是一个插入式库,可通过operational transformation协作编辑html表单。

从服务器推送事件很容易,有many ways to do it。确保所有客户的国家一致,这是困难的部分。这就是运算转换算法的用武之地。

答案 2 :(得分:3)

Ajax方法是一种方法。您可以像聊天应用程序一样实现它。实际的方式取决于正在查看的数据。简而言之

  1. 创建会话。它可以容纳共享文档的用户(例如excel文件)
  2. 当用户A进行更改时(例如更新单元格A5),使用Ajax将更改发送到服务器。更改可以与到达日期或某个索引值一起存储。
  3. 页面会不时触发后台Ajax调用。作为请求的一部分,也会传递最后访问日期。
  4. 收到请求后,您只需提供上次或索引所做的所有更改。您可以在响应中包含新的日期或索引值,以便它可以用于下一个请求。
  5. 当您确定无法访问前X个元素时,可以删除它们
  6. 是否会影响性能将在很大程度上取决于如何构建所有内容。

    您的其他选项是网络套接字。没有亲自使用它,但如果您可以控制用户将使用哪种浏览器,您可以试一试。它允许服务器将数据推送到浏览器。 一些链接: Web Sockets JSWeb Sockets in Firefox

答案 3 :(得分:3)

另一种选择是Orbited

  

Orbited提供纯粹的   浏览器中的JavaScript / HTML套接字。   它是一个Web路由器和防火墙   允许您集成Web   具有任意后端的应用程序   系统。您可以实施任何网络   浏览器中的协议 - 没有   借助插件。

     

Orbited是一个HTTP守护进程   针对持久的彗星进行了优化   连接。它被设计成   很容易与新的和   现有的申请。轨道允许   你写实时网络   应用程序,如聊天室或   即时通讯客户端,没有   使用任何外部插件,如Flash   或Java。

答案 4 :(得分:3)

如果您的用户仅使用现代浏览器,那么我将尝试使用HTML 5附带的websocket标准。 越来越多的浏览器将来会支持它,Google和Apple等公司正在努力解决这个问题。 这是一个入门教程: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

答案 5 :(得分:2)

如果您不想使用Web套接字,因为它们不受广泛支持,您需要查找Comet。这就是Google Docs可能会这样做的。

答案 6 :(得分:2)

如果您正在寻找实时协作富文本编辑器,那么<​​p> EtherPad已经开源了。

答案 7 :(得分:1)

限制ajax请求数量的一种方法是通过间隔它们来变得聪明。您不需要每秒发出一次请求。当您获得活动响应时,请在1秒内执行另一个请求。如果没有活动,那么2秒,然后是4等,请求之间最多可能有30秒。更新发生时,重置计时器。基本上,以智能方式隔离您的请求,使GUI 看起来尽可能响应。

答案 8 :(得分:1)

我建议使用像Atmosphere这样的Comet框架。它会自动为你的消息选择一个传输机制,如果你很幸运的话可以是websockets(但是因为这是抽象的,你不必担心)。无论如何,如果您不必处理个别请求/响应以及您将遇到的所有错误源和浏览器错误,那么它是非常有价值的。我去过那儿。有龙。 : - )

答案 9 :(得分:1)

另请查看pubsubhubbub - http://code.google.com/p/pubsubhubbub/ 观看视频,了解简短介绍。

答案 10 :(得分:0)

您还可以查看ShareJS运算转换库和Derby这是一个基于sharejs构建的框架。他们都有node.js后端 - sharejs是由Google Wave工程师编写的。