Example analysis of how to implement ajax long polling in php

黄舟
Release: 2023-03-14 20:28:02
Original
2437 people have browsed it

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. However, 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 the so-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 it has 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

    <!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>
Copy after login

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

Operation effect: In the picture, you can see that the request time without data reaches 40S , if data is obtained in the 40S request, the request is closed. After closing, continue with the next request!

Example analysis of how to implement ajax long polling in php

Example analysis of how to implement ajax long polling in php

The above is the detailed content of Example analysis of how to implement ajax long polling in php. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template