2013-08-07 4 views
9

나는이 examples에 대한 폴링 대 자바 스크립트의 긴 폴링을 표시했지만, 어떻게 서로 다른지 이해하지 못합니다. 특히 긴 폴링 예제와 관련하여 연결 상태를 어떻게 유지합니까?폴링 대 긴 폴링

(function poll(){ 
    setTimeout(function(){ 
    $.ajax({ url: "server", success: function(data){ 
     //Update your dashboard gauge 
     salesGauge.setValue(data.value); 

     //Setup the next poll recursively 
     poll(); 
    }, dataType: "json"}); 
    }, 30000); 
})(); 

이 긴 폴링의 예는 다음과 같습니다 :

이 전통적인 폴링 시나리오는 모습입니다

(function poll(){ 
    $.ajax({ url: "server", success: function(data){ 
    //Update your dashboard gauge 
    salesGauge.setValue(data.value); 

    }, dataType: "json", complete: poll, timeout: 30000 }); 
})(); 

감사합니다!

답변

12

차이점은 다음과 같습니다. 긴 폴링은 일종의 이벤트 기반 알림을 허용하므로 서버는 클라이언트에 데이터를 적극적으로 보낼 수 있습니다. 일반 폴링은 데이터를 가져 오는주기적인 검사입니다. 위키 피 디아는 다음과 같이 매우 자세합니다.

긴 폴링을 사용하면 클라이언트는 일반 폴링과 비슷한 방식으로 서버에서 정보를 요청합니다. 그러나 서버가 클라이언트에 대해 사용 가능한 정보를 가지고 있지 않은 경우, 빈 응답을 보내는 대신 서버는 요청을 보유하고 정보가 사용 가능하게 될 때까지 (또는 적절한 시간 초과 이벤트에 대해) 기다린 후 전체 응답이 마침내 고객에게 보냈습니다.

긴 폴링은 서버가 실제로 데이터가있을 때만 데이터를 전송하기 때문에 전송해야하는 데이터의 양이 줄어들어 클라이언트는 모든 간격 x마다 검사 할 필요가 없습니다.

전이중 클라이언트/서버 통신의 성능이 뛰어나고 (더욱 세련된) 방법이 필요하면 WebSocket 프로토콜을 사용해보십시오.

+1

클라이언트가 긴 폴링과 느린 응답의 차이점을 알릴 수 있습니까? 폴링과 롱 폴링은 기본적으로 같은 것입니다. 폴링 : "클라이언트 : 아직 준비가 되었습니까? 서버 : 아니오" 긴 폴링 : "클라이언트 : 아직 준비가 되었습니까? 서버 : ... 아니요". – DavidS

+0

@Davids : 차이점은 다음과 같습니다. 폴링을 사용하면 클라이언트가 "예/답"을 묻고 즉시 응답합니다. 긴 폴링을 사용하면 클라이언트는 묻지 만 즉시 응답하지 않습니다. 그가 응답 할 수있는 무언가가있을 때까지 서버는 질문에 응답하지 않습니다. 그래서 질문은 항상 기다리고 있습니다. – Robert

+0

@ 로버트 타임 아웃 이벤트가 있고 서버가 긴 폴링에서 데이터를 보낼 수없는 경우 어떻게됩니까? 클라이언트가 다시 동일한 요청을 보내야합니까? –

2

폴링은 기본적으로 클라이언트가 요청한 후 정보 용 서버을 정기적으로 확인하는 프로세스입니다. 필요한 정보를 사용할 수있는 경우 응답 형식으로 클라이언트에 전송됩니다. 그렇지 않으면 서버에서 빈 응답을 보냅니다. 폴링은 setInterval() 및 setTimeout()과 같은 기능을 사용하여 수행됩니다.

롱 폴링의 경우, 클라이언트는 서버에 요청을하고 응답을 사용할 수있는 경우, 서버는 필요한 정보를 사용할 수 없을 때까지 요청를 개최 , 그렇지 않은 정보로 응답합니다. 기존의 폴링과 달리 서버가 빈 응답으로 응답했을 것입니다.