2009-04-30 11 views
2

나는 기본적인 푸시 메시지 시스템을 쓰고있다. 작은 변화로 인해 제대로 작동하지 않게되었습니다. 설명하겠습니다. 내 원래 버전에서,이 같은 문서 무언가의에 코드를 삽입 할 수 있었다 :페이지 본문에서 jQuery .getJSON() 연결을 열어두고 대기 중입니까?

<head> 
    ...text/javascript"> 
    $(document).ready(function(){ 
    $(document).ajaxStop(check4Updates); 
    check4Updates(); 
    }); 

    function check4Updates(){ 
    $.getJSON('%PATH%', callback); 
    }; 
... 
</head> 

이 잘 작동하고 서버는 null가 (이 후를 말을하는 경우에도 열려있는 연결을 유지하는 것 2 분 타임 아웃). getJSON 함수를 무한정 반복해서 호출합니다. 해피 팬더.

이제 태그 사이에 코드 세그먼트를 넣어야합니다. $ (document) .ready() 함수에 대한 액세스는 거의 작동하지 않습니다.

<body> 
... 
check4Updates(); 
$("body").ajaxStop(check4Updates); 
... 
</body> 

이것은 잠시 동안 작동합니다. 잠시 후, check4Updates를 호출하는 것을 멈추고 무한 루프로 들어가 100 % 프로세서 시간을 사용하게됩니다.

페이지를 닫을 때까지 check4Updates가 반복적으로 호출되도록하려고합니다. 누군가 내 간단한 변화가 더 이상 예상대로 작동하지 않는 이유에 대한 통찰력이 있다면 알려 주시기 바랍니다. 읽고 나서 도와 주셔서 감사합니다. 당신이 당신의 백엔드를 망치 보관하지 않습니다 확인, 어떤 이유에서 폴링을 사용합니다 그래서 만약

최고 감사합니다, 반 응웬

답변

6

그래, 당신은 그 루프를 사용하고 싶지 않을 것입니다. 클라이언트를 잠그는 것 말고는 꽤 많이 DOSing입니다.

간단한만큼, 폴링 플러그인을 만들 :

출처 : http://web.archive.org/web/20081227121015/http://buntin.org:80/2008/sep/23/jquery-polling-plugin/

사용법 :

$("#chat").poll({ 
    url: "/chat/ajax/1/messages/", 
    interval: 3000, 
    type: "GET", 
    success: function(data){ 
     $("#chat").append(data); 
    } 
}); 

를 백업 할 수있는 코드 : 당신이 중 하나가 필요

(function($) { 
    $.fn.poll = function(options){ 
     var $this = $(this); 
     // extend our default options with those provided 
     var opts = $.extend({}, $.fn.poll.defaults, options); 
     setInterval(update, opts.interval); 

     // method used to update element html 
     function update(){ 
      $.ajax({ 
       type: opts.type, 
       url: opts.url, 
       success: opts.success 
      }); 
     }; 
    }; 

    // default options 
    $.fn.poll.defaults = { 
     type: "POST", 
     url: ".", 
     success: '', 
     interval: 2000 
    }; 
})(jQuery); 
+2

그래, 또는 거의 같은 소리 그는 혜성을 원해. http://plugins.jquery.com/project/Comet –

0

타임 아웃을 사용하여, 루프의 이러한 유형은 정말 좋은 생각입니다.

0

을 altCognito에서 설명한대로 폴링 메서드로 변경하거나 comet을 사용할 수 있습니다. 이 서버는 서버에서 클라이언트로 데이터를 푸시하도록 설계되었습니다. 필요에 따라 Jetty (Java 용) 또는 Twisted (Python) 또는 WebSync (ASP.NET/IIS)과 같은 것을 사용할 수 있습니다.