PHP의 Ajax 롱 폴링이란 무엇입니까?

一个新手
풀어 주다: 2023-03-15 18:48:01
원래의
3320명이 탐색했습니다.

PHP의 Ajax 긴 폴링은 클라이언트가 ajax 요청을 시작할 때 서버가 반환되도록 하는 조건이 트리거될 때까지 서버가 요청을 일시 중지하는 것으로 이해될 수 있습니다. ajax Long 폴링은 클라이언트 측의 불필요한 요청을 줄일 수 있지만 서버 측의 부담은 더 커질 것입니다.

PHP의 Ajax 롱 폴링이란 무엇입니까?

Ajax 롱 폴링이란 무엇인가요? PHP에서 Ajax 긴 폴링을 구현하는 방법은 무엇입니까? 다음 글에서 소개하겠습니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

소위 ajax 긴 폴링은 단순히 클라이언트가 ajax 요청을 시작하고 서버가 반환되기 전에 서버가 반환되도록 하는 조건이 트리거될 때까지 서버가 (루프를 통해) 요청을 일시 중지한다는 것을 의미합니다. 보류 중이며 서버가 반환되기를 기다리고 있습니다.

ajax 긴 폴링은 클라이언트의 불필요한 요청을 줄일 수 있지만 서버에 대한 부담은 더 커질 것입니다. 또한 websocket을 사용하여 push를 구현할 수도 있지만 호환성이 좋지 않으며 일부 브라우저에서는 websocket을 지원하지 않습니다.

PHP는 Ajax 긴 폴링을 구현합니다

여기서 AJAX를 사용하여 '성공' 값을 얻기 위해 data.PHP 페이지를 요청하는데 요청 시간이 80초에 이릅니다. 이 80초 동안 서버에서 '성공'이 반환되지 않으면 데이터가 반환되거나 연결이 종료되기 전 '성공' 값이 0이 될 때까지 연결 상태가 유지됩니다. 연결을 종료한 후 다음 요청을 계속합니다.

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>
로그인 후 복사

이것은 무한 루프입니다. 루프의 종료 조건은 반환 결과를 얻고 Json 데이터를 반환하는 것입니다.

그리고 $_POST['time'] 매개변수를 허용하여 과도한 리소스 낭비를 방지하기 위해 루프 시간 초과를 제한합니다. (브라우저가 닫히면 서버에 메시지를 보내지 않으며 루프에서 계속 사용할 수 있습니다.)

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();        
            }        
        }     
    ?>
로그인 후 복사

작동 효과: 그림에서 데이터가 없는 요청 시간에 도달한 것을 볼 수 있습니다. 40S의 요청 시간을 얻으면 데이터 요청이 종료됩니다. 종료 후 다음 요청을 진행해주세요!

PHP의 Ajax 롱 폴링이란 무엇입니까?

PHP의 Ajax 롱 폴링이란 무엇입니까?

더 많은 관련 지식을 알고 싶으시다면 PHP 중국어 홈페이지를 방문해주세요! !

위 내용은 PHP의 Ajax 롱 폴링이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿