>  기사  >  웹 프론트엔드  >  리버스 아약스란 무엇입니까? 역방향 아약스를 구현하는 방법은 무엇입니까? (선택된 버전)

리버스 아약스란 무엇입니까? 역방향 아약스를 구현하는 방법은 무엇입니까? (선택된 버전)

寻∝梦
寻∝梦원래의
2018-09-10 15:30:271932검색

역방향 ajax을 아시나요? Reverse Ajax가 어떻게 구현되는지 알고 있나요? 잘 모르겠으니, Reverse Ajax에 대한 자세한 내용을 소개하는 이 글을 한 번 살펴보시면 어떨까요. 아래에서 이 글을 읽어보세요

Reverse ajax란 무엇인가

Reverse Ajax(Reverse Ajax)는 본질적으로 다음과 같은 개념입니다: 서버에서 데이터에 액세스할 수 있다는 것 클라이언트에 데이터를 보냅니다. 표준 HTTP Ajax 요청에서 데이터는 서버로 전송됩니다. Reverse Ajax는 특정 방식으로 Ajax 요청 생성을 시뮬레이션할 수 있으므로 서버는 가능한 한 빨리 클라이언트에 이벤트를 보낼 수 있습니다(낮은 대기 시간 통신).

Reverse ajax 구현 방법

1.Polling(Polling)

Polling은 실제로 가장 어리석은 방법입니다. reverse ajax 구현: javascript를 사용하여 클라이언트에서 정기적으로 ajax 요청을 보냅니다.

setInterval(function() { 
    $.getJSON('events', function(events) { 
        console.log(events); 
    }); 
}, 2000);12345

서버 측 이벤트를 최대한 빨리 얻으려면 폴링 간격(두 요청 사이의 시간)이 최대한 작아야 합니다. 이것의 단점은 명백합니다. 간격이 줄어들면 클라이언트 브라우저는 더 많은 요청을 발행하고 그 중 다수는 유용한 데이터를 반환하지 않으며 이로 인해 대역폭과 프로세스 리소스가 낭비됩니다.

2. PiggyBack(PiggyBack)

PiggyBack은 필수가 아닌 요청을 모두 삭제하므로 폴링보다 더 현명한 접근 방식입니다. 데이터를 반환하지 않습니다).

이는 브라우저가 여전히 적극적으로 요청을 발행하지만 각 요청의 응답에서 현재 응답 외에도 마지막 요청 이후의 변경 사항도 포함된다는 의미인 반능동 방식입니다. 발생하는 변경 사항은 동시에 브라우저로 전송됩니다.

즉, 요청한 업데이트는 다음 요청의 응답과 함께 전달되어 다시 전송됩니다. 이러한 방식으로 브라우저는 마지막 요청이 업데이트된 것처럼 느낍니다. 하지만 이 느낌은 브라우저가 서버에 요청하는 빈도에 따라 달라집니다. 두 번째 요청이 전송되지 않으면 마지막 업데이트를 얻을 수 없습니다.

3. Comet(서버 푸시)

이는 HTTP 긴 연결을 기반으로 하는 "서버 푸시" 기술입니다.

두 가지 주요 구현 방법이 있습니다.

1) HTTP 스트리밍 #🎜 🎜##🎜🎜 #숨겨진 iframe을 페이지에 삽입하고, 숨겨진 iframe의 src 속성을 긴 연결 요청으로 설정하거나 xhr 요청을 사용하면 서버가 클라이언트에 지속적으로 데이터를 입력합니다.

장점: 메시지가 즉시 도착하고, 불필요한 요청이 전송되지 않으며 관리가 비교적 편리합니다.

단점: 서버에서 긴 연결을 유지하면 오버헤드가 증가합니다.

예: Gmail 채팅

<script type="text/javascript">
    $(function () {
        (function iframePolling() {
            var url = "${pageContext.request.contextPath}/communication/user/ajax.mvc?timed=" + new Date().getTime();            var $iframe = $(&#39;<iframe id="frame" name="polling" style="display: none;" src="&#39; + url + &#39;"></iframe>&#39;);
            $("body").append($iframe);
            $iframe.load(function () {
                $("#logs").append("[data: " + $($iframe.get(0).contentDocument).find("body").text() + " ]<br/>");
                $iframe.remove();                // 递归
                iframePolling();
            });
        })();    
    });</script>

2) HTTP Long Polling

이런 경우 클라이언트는 서버에 요청하고 연결을 엽니다. 이 연결은 서버로부터 데이터를 수신한 후에만 닫힙니다. 서버는 데이터를 전송한 후 즉시 연결을 닫습니다. 클라이언트는 즉시 새로운 연결을 열고 다음 데이터를 기다립니다. (자세한 내용을 알고 싶으시면 PHP 중국어 홈페이지

AJAX 개발 매뉴얼

열을 참고하세요.) 장점: 메시지가 없을 경우 자주 요청하지 않습니다. , 그리고 더 적은 리소스를 소비합니다.

단점: 서버 보류 연결은 리소스를 소비하고, 반환되는 데이터의 순서가 보장되지 않으며, 관리 및 유지 관리가 어렵습니다.

예: WebQQ, Hi 웹 버전, Facebook IM.

<script type="text/javascript">
            $(function () {
                (function longPolling() {
                    $.ajax({
                        url: "${pageContext.request.contextPath}/communication/user/ajax.mvc",
                        data: {"timed": new Date().getTime()},
                        dataType: "text",
                        timeout: 5000,
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            $("#state").append("[state: " + textStatus + ", error: " + errorThrown + " ]<br/>");                            if (textStatus == "timeout") { // 请求超时
                                    longPolling(); // 递归调用
                                // 其他错误,如网络错误等
                                } else { 
                                    longPolling();
                                }
                            },
                        success: function (data, textStatus) {
                            $("#state").append("[state: " + textStatus + ", data: { " + data + "} ]<br/>");                            if (textStatus == "success") { // 请求成功
                                longPolling();
                            }
                        }
                    });
                })();
            });        </script>

이 기사는 여기에서 끝납니다. (자세한 내용을 보려면 PHP 중국어 웹사이트

AJAX 사용자 설명서

열로 이동하세요.) 질문 아래에 메시지를 남길 수 있습니다.

위 내용은 리버스 아약스란 무엇입니까? 역방향 아약스를 구현하는 방법은 무엇입니까? (선택된 버전)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.