【问题标题】:How does one do realtime updates of a web page?如何实时更新网页?
【发布时间】:2011-04-21 08:09:23
【问题描述】:

Google 的 GMail 服务之所以这样做,是因为它集成了 Google Talk —— 而 Etherpad(现在的 typewith.me)使该系统闻名,例如 Google Wave 所使用的系统。当其他用户对页面进行更改时,所有此类系统都会立即有效地更新用户正在处理的页面。发生变化时很容易告诉服务器发生了变化,但让客户端自己更新就更难了。

这种实时编辑是如何工作的?它是否只是让客户端每秒 ping 服务器数十次以进行更新?

【问题讨论】:

  • 它叫做“AJAX”。查一下。
  • @Frustrated:AJAX 允许您更新页面,但实际上并不允许您实时更新。
  • @Paul:我认为他在问更多“AJAX 是如何工作的?”
  • stackoverflow.com/questions/136012/comet-and-jquery 了解一下 comet、cometd、node.js 和 Bayeux 协议。
  • @Frustrated:AJAX 让 Javascript 向服务器发出请求。但它不允许服务器向客户端发出请求,而这是这样一个系统工作所必需的。除非您将 AJAX 放入轮询循环中,否则每个客户端每秒大约 5 个请求,这是不可行的,并且仍然没有真正像 GTalk 和 Etherpad 和朋友那样快速更新。

标签: javascript


【解决方案1】:

AFAIK,他们使用某种形式的 AJAX。但是,我建议您通过 jQuery 使用 AJAX 库。如果你使用 jQuery 来做,AJAX 会大大简化。

【讨论】:

  • AJAX 不允许您实时更新。它可以让你更新,是的,但它本身并不能以 Etherpad 和朋友需要的速度提供更新。
【解决方案2】:

您可以使用Comet

【讨论】:

【解决方案3】:

有很多选择,但基本上我建议您查看XMPP。我认为我不够好,无法正确归结,所以我会让a wiki talk for me

事实上,这些系统的谷歌语音和视频uses it


关于 AJAX,我认为它是一种沟通渠道,而不是用于多人交流的平台或协议。你也可以回答"Use xml over http!" 并且仍然在同一点:)

【讨论】:

  • Google Talk 是根据 XMPP 实现的,是的,但不是 Gmail 的浏览器组件部分。浏览器不理解 XMPP——你需要以某种方式实现一个 XMPP Javascript 客户端,并且你需要一个特定的服务器才能做到这一点。
  • 我认为 xmpp javascript 客户端可以与 XMPP 服务器进行通信。不过,我不确定。但是查看维基百科让我得出结论,Google Wave 使用 XMPP 作为其根源
【解决方案4】:

Asynchronous JavaScript and XML or AJAX

使用 Ajax,Web 应用程序可以在后台异步地从服务器检索数据,而不会干扰现有页面的显示和行为。 Ajax 技术的使用导致网页上交互式或动态界面的增加。通常使用 XMLHttpRequest 对象检索数据。尽管名称如此,但实际上并不需要使用 XML,请求也不需要是异步的。

【讨论】:

  • AJAX 可以让您更新页面,但不能让您实时更新页面,服务器会一时兴起。
【解决方案5】:

Javascript / Ajax 允许您发送要在客户端(即通过浏览器)执行的代码。 现在,如果你定义一个循环,每 5 秒检查一次服务器上的新消息,您可以“实时”更新网页(加上服​​务器处理请求和发送响应的时间),或类似的。一个实际的例子是 RoR Prototype Periodic_call_remote Ajax 助手。

希望这会有所帮助!

【讨论】:

  • 5 秒远远不够快。
  • 5 秒只是一个例子。无论如何,总是包含固定延迟(服务器响应时间)和可变延迟,这可能是从网络拥塞到共享主机服务器减速等任何因素。更不用说实时“感觉”的因素还取决于如何生成更新需要大量数据。
【解决方案6】:

我建议在异步 JS 中使用 AJAX 和 jQuery

http://api.jquery.com/category/ajax/

【讨论】:

  • AJAX 不能解决这个问题。它允许客户端向服务器请求更多数据,但不允许服务器向客户端发出请求。
【解决方案7】:

正如大家所说.. AJAX。

客户端在 30 秒后继续询问服务器是否有任何新的事情要做。此外,您可以在 ajax 请求上设置超时值。保持时间有点长..只要有新的东西,服务器就会回复。

服务器不可能要求客户端加载一些数据。

如果您正在考虑在同一行上实现某些东西,请查找 strophe.js,它是一个 XMPP js 库

【讨论】:

  • -1 用于: 1. 已在此处复制其他答案。 2. 比上述重复时间晚 3.5 小时。 3. 110% 不正确。不要说“从不”——因为那时人们会发布像 this one 这样的答案,而你最终会在你的脸上留下鸡蛋。
  • 不知道是什么让你的睡衣陷入困境。,我的脸还是干净的 :)... 引用维基百科“Comet 是一种 Web 应用程序模型,其中 LONG-HELD HTTP 请求允许 Web服务器将数据推送到浏览器”和“服务器推送:服务器和客户端之间的连接保持打开状态,服务器在可用时发送数据。”。连接保持打开很长一段时间(或永远),直到服务器有新的东西。
  • 顺便说一句,请查一下 strophe.js,它是 XMPP BOSH 的库……是 Comet 提到的替代方案之一。请把我的不正确率降低到 110% 以下.. 漂亮吗?
猜你喜欢
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多