facebook 如何将数据推送到新闻提要?

Posted

技术标签:

【中文标题】facebook 如何将数据推送到新闻提要?【英文标题】:How does facebook push data to news feed? 【发布时间】:2011-07-12 19:26:06 【问题描述】:

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

【问题讨论】:

如果您有萤火虫,请在控制台中查看。你会看到它是一个 GET 请求,可能是通过一个 AJAX 请求,它只是无限期地旋转。他们真正的问题是他们如何保持这个请求开放,因为它似乎没有设置超时或间隔。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

因此,您将加载您的页面,然后他们会根据登录者对服务器进行初始调用以加载一些消息,例如使用 JQuery 之类的框架:

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

然后,当您向下滚动时,它们会记录您何时接近页面底部并且需要加载更多内容,这样您就不会没有数据,然后它们会自动进行另一个调用。这称为无限滚动,并跟踪您在 DOM 中的位置:

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

【讨论】:

以上是关于facebook 如何将数据推送到新闻提要?的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 中的新闻提要数据库设计

在将元素推送到 HTML ID 时更新实时 JavaScript 数组

如何使用Pentaho勺子将数据从MySQL数据库推送到Facebook网页

将所有数据推送到数组后设置状态

Flume 阅读 Facebook 页面/提要/帖子

facebook 如何将通知、好友请求和其他更新推送到其 Android 移动应用程序?