【发布时间】:2012-03-14 21:45:09
【问题描述】:
今天,当我在两个不同的浏览器中使用 Google+ 时,我用一个浏览器发布了一些内容。该帖子几乎立即出现在第二个浏览器上(可能有 0.5 秒的延迟)。谷歌是如何做到这一点的?他们是否经常发送 AJax 请求以检查新帖子?这不会给服务器带来很大的压力吗?
【问题讨论】:
-
有点,但我觉得这个问题更广泛。
标签: javascript ajax
今天,当我在两个不同的浏览器中使用 Google+ 时,我用一个浏览器发布了一些内容。该帖子几乎立即出现在第二个浏览器上(可能有 0.5 秒的延迟)。谷歌是如何做到这一点的?他们是否经常发送 AJax 请求以检查新帖子?这不会给服务器带来很大的压力吗?
【问题讨论】:
标签: javascript ajax
有多种方法可以做到这一点:
每个人都有自己的注意事项和可能性。
如果您有兴趣做一个实时应用程序,您可以看看socket.io,它是所有这些技术的一个很棒的抽象库,所以它会使用最好的那个在您的浏览器中支持。
【讨论】:
不能确切地说谷歌是如何做到的,但他们必须使用某种push technology。 HTML5 WebSockets 可以在较新的浏览器中执行此操作。在不支持 websockets 的旧浏览器中,客户端通常会定期轮询服务器。请参阅socket.io 了解 WebSockets 的简洁跨浏览器实现,如果浏览器不支持它,可以回退到其他方法,documented here。
【讨论】:
我想他们可以使用的一种技术是立即发送 AJAX 请求,然后在服务器端阻止它,直到超时或可以发送内容。
【讨论】:
多年来,谷歌一直在使用 Comet 或 Reverse Ajax:http://en.wikipedia.org/wiki/Comet_(programming))
但是,我相信他们现在正在使用 HTML5 WebSocket,因为 API 已经准备就绪: http://en.wikipedia.org/wiki/WebSocket/
【讨论】: