php – 普通ajax和长轮询之间的区别

我试图更多地了解长期轮询以实时“操纵”一个网站,看到一些视频,我到目前为止的想法:

假设我有一个旧日期,sql和我对它进行回音.因为长轮询会知道旧日期是否会与根据setInterval函数不时看起来相同……?

假设我想展示一个博客,其中所有文本都在mysql中,但是我依旧发布一个新的出版物,当时谁在页面上,你会看到发布时间(不是告诉我?),那么如何一个长轮询代码将知道旧版和新版之间的区别?吃甚至不给冲突或重复sql上刻的相同日期.

解决方法:

既然你最初的问题是两种技术之间的差异,我将从这开始:

AJAX投票

使用AJAX轮询更新页面意味着,您将在定义的时间间隔内向服务器发送请求,如下所示:

客户端向服务器发送请求,服务器立即响应.

一个简单的例子(使用jQuery)看起来像这样:

setInterval(function(){
    $('#myCurrentMoney').load('getCurrentMoney.PHP');
}, 30000);

这样做的问题是,这会导致很多无用的请求,因为每个请求都不会有新的东西.

AJAX长轮询

使用AJAX长轮询意味着客户端向服务器发送请求,服务器在响应之前等待新数据可用.这看起来像这样:

客户端发送请求,服务器“不定期”响应.一旦服务器响应,客户端将向服务器发送新请求.

客户端看起来像这样:

refresh = function() {
    $('#myCurrentMoney').load('getCurrentMoney.PHP',function(){
        refresh();
    });
}

$(function(){
    refresh();
});

这样做只是将getCurrentMoney.PHP输出加载到当前的money元素中,一旦有回调,就开始一个新的请求.

在服务器端,您通常使用循环.要解决您的问题,服务器将如何知道哪些是新的出版物:要么将最新的时间戳传递给客户端可用的发布到服务器,要么使用“长轮询开始”的时间作为indiactor:

<?
$time = time();

while ($newestPost <= $time) {
    // note that this will not count as execution time on linux and you won't run into the 30 seconds timeout - if you wan't to be save you can use a for loop instead of the while
    sleep(10000);
    // getLatestPostTimestamp() should do a SELECT in your DB and get the timestamp of the latest post
    $newestPost = getLatestPostTimestamp();
}

// output whatever you wan't to give back to the client
echo "There are new posts available";

在这里,我们不会有“无用”的请求.

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...