实时更新是如何工作的?

37

现在,几乎所有流行的网站都采用了实时更新技术,尤其是那些用户量大的网站。

我想知道这些“实时更新”是如何工作的?我只是想从一个鸟瞰的角度来了解一下。我怀疑JS不能每X秒调用服务器获取更新,然后将其附加到<ul>中。是否从服务器发送通知以拉取更多内容?

如果有一篇简单的文章解释这个问题并带有演示,那就太好了。


6
两个词:Web套接字。 - Dennis
1
这是关于HTML5的WebSocket的内容。 - Derek 朕會功夫
24
WebSocket(网络套接字) - Šime Vidas
3个回答

27

Stack Overflow正在使用Web Sockets进行实时更新。如果您查看源代码(2012年的源代码),您会看到:

StackExchange.ready(function () {
    StackExchange.realtime.init('ws://sockets.ny.stackexchange.com');
    StackExchange.realtime.subscribeToInboxNotifications();
    StackExchange.realtime.subscribeToReputationNotifications('1');
});

但请注意,一些Opera版本不支持WebSocket。(直到Opera 10.70才开始支持
然而,Facebook似乎并没有使用Web Sockets,我认为他们只是使用了一种称为长轮询的简单XHR技术,服务器保持连接直到有新信息,然后响应请求。如果你打开开发者工具,你会发现总是有一个状态为挂起的请求。
它确实每约60秒发送一次请求。

2

看起来 Twitter 也使用简单的 XHR(1 分钟间隔)进行“实时更新”。


0

Facebook使用长轮询/彗星。因此,它建立连接并等待响应,如果没有响应,则超时并再次尝试。超时时间约为40秒。这就是它实现大多数即时更新的方式。但是,他们使用了一系列技术。更多关于长轮询的信息请参见此处。

http://en.wikipedia.org/wiki/Comet_(programming)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接