facebook如何将数据推送到新闻动态

How does facebook push data to news feed?

本文关键字:新闻 动态 数据 facebook      更新时间:2023-09-26

我很好奇Facebook是如何将数据推送到浏览器的。新数据显示在提要的顶部,无需重新加载页面或单击按钮
Facebook是通过以设定的间隔通过AJAX轮询服务器来实现这一点,还是通过某种方式将新数据从服务器无故推送到客户端?
如果是这样,他们使用什么语言或API来做到这一点?

这实际上被称为'长轮询',或'彗星'。执行服务器推送有不同的方法,但最常见的方法是在接收数据时保持连接打开(它有缺点,因为浏览器对主机的打开连接数量有限制)。Facebook已经开源了Tornado网络服务器,它可以处理大量开放的连接(这可能是一个问题,你有很多用户,但你使用apache为例)。在收到AJAX响应的那一刻,您只需执行一个新请求,等待下一个响应。

基本上代码做一个AJAX调用到他们的服务器,或者等待触发另一个请求的响应,轮询计时器,或者他们打开一个websocket接收数据,一旦它被推送。这当然是针对出现在提要顶部的"新"数据。当到达页面底部时,它们只是执行另一个AJAX调用来获取下一个n项。

他们使用AJAX推送,并且他们使用(至少他们曾经使用过)无限滚动。

所以你加载你的页面,他们会对服务器进行初始调用,根据登录的人加载一些消息,比如使用JQuery这样的框架:

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

然后当你向下滚动时,他们会注意到你何时接近页面底部,他们需要加载更多的数据,这样你就不会没有数据了,然后他们会自动拨打另一个电话。这被称为无限滚动,并跟踪您在DOM中的位置:

仅举一个例子:http://ajaxian.com/archives/implementing-infinite-scrolling-with-jquery