Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist Ajax Long Polling in PHP?

Was ist Ajax Long Polling in PHP?

一个新手
一个新手Original
2017-09-06 16:16:213314Durchsuche

Ajax-Long-Polling in PHP kann so verstanden werden, dass der Server die Anforderung aussetzt, wenn der Client eine Ajax-Anfrage initiiert, bis die Bedingung ausgelöst wird, dass der Server zurückkommt Der Server kehrt zurück. Ajax-Long-Polling kann nutzlose Anfragen vom Client reduzieren, aber der Druck auf den Server wird größer sein.

Was ist Ajax Long Polling in PHP?

Was ist Ajax Long Polling? Wie implementiert man Ajax-Long-Polling in PHP? Der folgende Artikel stellt es Ihnen vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Das sogenannte Ajax-Long-Polling bedeutet einfach, dass der Client eine Ajax-Anfrage initiiert und der Server die Anfrage (durch eine Schleife) anhält, bis die Bedingung ausgelöst wird und der Server zurückkehrt Der Server kehrt zurück. Warten Sie, bis der Server zurückkehrt.

Ajax Long Polling kann nutzlose Anfragen vom Client reduzieren, aber der Druck auf den Server wird größer sein. Darüber hinaus kann Websocket zum Implementieren von Push verwendet werden, die Kompatibilität ist jedoch schlecht und einige Browser unterstützen Websocket nicht.

PHP implementiert Ajax Long Polling

Hier verwenden wir AJAX, um die data.PHP-Seite anzufordern, um den Wert von „Erfolg“ zu erhalten, und Die Anforderungszeit erreicht 80 Sekunden. Wenn während dieser 80 Sekunden kein „Erfolg“ vom Server zurückgegeben wird, bleibt der Verbindungsstatus bestehen, bis Daten zurückgegeben werden oder der Wert von „Erfolg“ 0 ist, bevor die Verbindung geschlossen wird. Fahren Sie nach dem Schließen der Verbindung mit der nächsten Anfrage fort.

index.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  
    <head>  
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">  
        <script  type="text/javascript" src="http://s1.hqbcdn.com/??lib/jquery/jquery-1.7.2.min.js"></script>  
    </head>  
    <body>  
    <p id="msg"></p>  
    <input id="btn" type="button" value="测试" />  
    <script  type="text/javascript" >  
        $(function(){  
            $("#btn").bind("click",{btn:$("#btn")},function(evdata){  
                $.ajax({  
                    type:"POST",  
                    dataType:"json",  
                    url:"data.php",  
                    timeout:80000,     //ajax请求超时时间80秒  
                    data:{time:"80"}, //40秒后无论结果服务器都返回数据  
                    success:function(data,textStatus){  
                        //从服务器得到数据,显示数据并继续查询  
                        if(data.success=="1"){  
                            $("#msg").append("<br>[有数据]"+data.text);  
                            evdata.data.btn.click();  
                        }  
                        //未从服务器得到数据,继续查询  
                        if(data.success=="0"){  
                            $("#msg").append("<br>[无数据]");  
                            evdata.data.btn.click();  
                        }  
                    },  
                    //Ajax请求超时,继续查询  
                    error:function(XMLHttpRequest,textStatus,errorThrown){  
                        if(textStatus=="timeout"){  
                            $("#msg").append("<br>[超时]");  
                            evdata.data.btn.click();  
                        }  
                    }  

                });  
            });  

        });  
    </script>  
    </body>  
    </html>

Hier ist eine Endlosschleife. Die Endbedingung der Schleife besteht darin, das Rückgabeergebnis zu erhalten und Json-Daten zurückzugeben.

Und akzeptiert den Parameter $_POST[‘time’], um das Schleifen-Timeout zu begrenzen und eine übermäßige Verschwendung von Ressourcen zu vermeiden. (Der Browser sendet beim Schließen keine Nachricht an den Server und die Verwendung kann in einer Schleife fortgesetzt werden)

data.php

    <?php  
        if(empty($_POST[&#39;time&#39;]))exit();        
        set_time_limit(0);//无限请求超时时间        
        $i=0;        
        while (true){        
            //sleep(1);        
            usleep(500000);//0.5秒        
            $i++;        
            //若得到数据则马上返回数据给客服端,并结束本次请求        
            $rand=rand(1,999);        
            if($rand<=15){        
                $arr=array(&#39;success&#39;=>"1",&#39;name&#39;=>&#39;xiaoyu&#39;,&#39;text&#39;=>$rand);        
                echo json_encode($arr);        
                exit();        
            }        
            //服务器($_POST[&#39;time&#39;]*0.5)秒后告诉客服端无数据        
            if($i==$_POST[&#39;time&#39;]){        
                $arr=array(&#39;success&#39;=>"0",&#39;name&#39;=>&#39;xiaoyu&#39;,&#39;text&#39;=>$rand);        
                echo json_encode($arr);        
                exit();        
            }        
        }     
    ?>

Betriebseffekt: In der Abbildung Sie können sehen, dass die Anforderungszeit ohne Daten erreicht wird. Wenn nach 40 Sekunden Daten in der 40S-Anforderung abgerufen werden, wird die Anforderung geschlossen. Nach dem Schließen mit der nächsten Anfrage fortfahren!

Was ist Ajax Long Polling in PHP?

Was ist Ajax Long Polling in PHP?

Weitere Informationen zu diesem Thema finden Sie auf der PHP-Chinese-Website! !

Das obige ist der detaillierte Inhalt vonWas ist Ajax Long Polling in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn