Home >Backend Development >PHP Tutorial >PHP implements Ajax long polling_PHP tutorial

PHP implements Ajax long polling_PHP tutorial

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-07-13 09:56:13836browse

PHP implements Ajax long polling

In the traditional AJAX polling method, the client queries the server for the latest data at user-defined intervals. This method of pulling data requires a short time interval to ensure the accuracy of the data, but if the time interval is too short, the customer service side will send multiple requests to the server in a short period of time.

Reverse AJAX, which is called long polling or COMET. The server and client need to maintain a long-term request, which allows the server to return messages to the client when there is data.

Here we use AJAX to request the data.php page to obtain the value of ‘success’, and the request time reaches 80 seconds. If no 'success' is returned from the server during these 80 seconds, the connection status will remain until data is returned or the value of 'success' is 0 before the connection is closed. After closing the connection, continue the next request.

index.html



2722442ea08f48e718c2e50bde46f30d2cacc6d41bbb37262a98f745aa00fbf0
11552e2819fe500893fe2d70e41faf4e $(function(){ $("#btn").bind("click",{btn:$("#btn")},function(evdata){ $.ajax({ type:"POST", dataType:"json", url:"data.php", timeout:80000, //ajax request timeout 80 seconds data:{time:"80"}, //The server will return data regardless of the result after 40 seconds success:function(data,textStatus){ //Get data from the server, display the data and continue querying if(data.success=="1"){ $("#msg").append("
[has data]" data.text); evdata.data.btn.click(); } //No data was obtained from the server, continue querying if(data.success=="0"){ $("#msg").append("
[No data]"); evdata.data.btn.click(); } }, //Ajax request times out, continue querying error:function(XMLHttpRequest,textStatus,errorThrown){ if(textStatus=="timeout"){ $("#msg").append("
[Timeout]"); evdata.data.btn.click(); } } }); }); }); 2cacc6d41bbb37262a98f745aa00fbf0

This is an infinite loop. The end condition of the loop is to obtain the return result and return Json data.

And accepts the $_POST['time'] parameter to limit the loop timeout to avoid excessive waste of resources. (The browser will not send a message to the server when it is closed, and the use may continue in a loop)

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();      
        }      
    }   
?>



Operating effect: In the picture, you can see that the request time without data reaches 40S. If data is obtained during the 40S request, the request will be closed. After closing, continue with the next request!

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/989128.htmlTechArticlePHP implements Ajax long polling. The traditional AJAX polling method, the client goes to the server at user-defined time intervals Query the latest data. This method of pulling data takes a very short time...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn