我很好奇Facebook是如何将数据推送到浏览器中的,就像在新闻订阅中一样。新的数据会在不重新加载页面或点击按钮的情况下显示在订阅的顶部。
Facebook是通过在一定时间间隔内通过AJAX轮询服务器来实现这一点的吗?还是他们以某种方式无端从服务器推送新数据到客户端中?
如果是这样,他们使用什么语言或API来完成这个操作?
我很好奇Facebook是如何将数据推送到浏览器中的,就像在新闻订阅中一样。新的数据会在不重新加载页面或点击按钮的情况下显示在订阅的顶部。
Facebook是通过在一定时间间隔内通过AJAX轮询服务器来实现这一点的吗?还是他们以某种方式无端从服务器推送新数据到客户端中?
如果是这样,他们使用什么语言或API来完成这个操作?
实际上它被称为“长轮询”或'comet'。有不同的方法来执行服务器推送,但最常见的方法是在接收数据时保持连接开放(它有缺点,因为浏览器对每个主机打开连接的数量有限制)。Facebook开源了Tornado web servers,它可以处理大量的开放连接(如果您有很多用户,但例如正在使用Apache,则可能会出现问题)。在接收AJAX响应的那一刻,只需执行新的请求,等待下一个响应。
http://api.jquery.com/jQuery.ajax/
当你向下滚动时,它们会注意到你接近页面底部并且需要加载更多数据,然后自动发起另一个调用,以免让你没有数据。这被称为无限滚动,并跟踪你在DOM中的位置。