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 如何将数据推送到新闻提要?的主要内容,如果未能解决你的问题,请参考以下文章
在将元素推送到 HTML ID 时更新实时 JavaScript 数组