Facebook如何将数据推送到新闻源?

11

我很好奇Facebook是如何将数据推送到浏览器中的,就像在新闻订阅中一样。新的数据会在不重新加载页面或点击按钮的情况下显示在订阅的顶部。
Facebook是通过在一定时间间隔内通过AJAX轮询服务器来实现这一点的吗?还是他们以某种方式无端从服务器推送新数据到客户端中?
如果是这样,他们使用什么语言或API来完成这个操作?


2
如果您有Firebug,请查看控制台。您将看到一个GET请求,很可能是通过AJAX请求,它只是无限旋转。真正的问题是他们如何保持这个请求处于打开状态,因为它似乎没有设置超时或间隔。 - grep
3个回答

4

实际上它被称为“长轮询”或'comet'。有不同的方法来执行服务器推送,但最常见的方法是在接收数据时保持连接开放(它有缺点,因为浏览器对每个主机打开连接的数量有限制)。Facebook开源了Tornado web servers,它可以处理大量的开放连接(如果您有很多用户,但例如正在使用Apache,则可能会出现问题)。在接收AJAX响应的那一刻,只需执行新的请求,等待下一个响应。


3
基本上,该代码执行一个AJAX调用到他们的服务器,并等待响应触发另一个请求,定时轮询,或者他们打开一个websocket以接收数据,一旦数据被推送就立即显示。当然,这是为了在动态更新源中出现“新”数据。当页面滚动到底部时,他们只需执行另一个AJAX调用以获取下n个项。

2
他们使用AJAX推动它,并且他们使用(至少曾经使用过)无限滚动。
所以你加载页面,他们会首先调用服务器来加载一些消息,根据谁登录了,比如使用JQuery这样的框架:

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

当你向下滚动时,它们会注意到你接近页面底部并且需要加载更多数据,然后自动发起另一个调用,以免让你没有数据。这被称为无限滚动,并跟踪你在DOM中的位置。
仅举一个例子:http://ajaxian.com/archives/implementing-infinite-scrolling-with-jquery

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