Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php facebook如何将数据推送到新闻提要?_Php_Javascript_Ajax_Polling - Fatal编程技术网

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

Php facebook如何将数据推送到新闻提要?,php,javascript,ajax,polling,Php,Javascript,Ajax,Polling,我很好奇Facebook是如何像在新闻提要中那样将数据推送到浏览器的。新数据显示在提要顶部,无需重新加载页面或单击按钮 Facebook是通过在设定的时间间隔内通过AJAX轮询其服务器来实现这一点的,还是通过某种方式将新数据从服务器推送到客户端而无缘无故? 如果是这样的话,他们使用什么语言或API来实现这一点?他们使用AJAX来推动它,并且使用(至少他们以前使用过)无限滚动 因此,您将加载页面,他们将根据登录者对服务器进行初始调用以加载一些消息,比如使用JQuery这样的框架: 然后当你向下滚

我很好奇Facebook是如何像在新闻提要中那样将数据推送到浏览器的。新数据显示在提要顶部,无需重新加载页面或单击按钮
Facebook是通过在设定的时间间隔内通过AJAX轮询其服务器来实现这一点的,还是通过某种方式将新数据从服务器推送到客户端而无缘无故?

如果是这样的话,他们使用什么语言或API来实现这一点?

他们使用AJAX来推动它,并且使用(至少他们以前使用过)无限滚动

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

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


仅举一个例子:

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

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

如果您有firebug,请查看控制台。您将看到的是一个GET请求,可能是通过一个AJAX请求,它只是无限旋转。他们真正的问题是如何保持此请求打开,因为它似乎并没有设置为超时或间隔。