2013-08-26 3 views
2

저는 성공시 자체를 호출하기 위해 setTimeout을 호출하는 ajax 호출이있는 함수에서 간단한 채팅 구현 작업을하고 있습니다. 이것은 30 초마다 실행됩니다. 이 잘 작동하지만 메시지가 왔을 때 좀 더 즉각적인 알림을 싶습니다. 내가 이렇게 보이는 jQuery 코드와 롱 폴링에 대한 사례를 많이보고 있어요 :롱 폴링 : 어떻게 진정합니까?

function poll() 
{ 
    $.ajax(
    { 
     data:{"foo":"bar"}, 
     url:"webservice.do", 
     success:function(msg) 
     { 
      doSomething(msg); 
     }, 
     complete:poll 
    }); 
} 

나는 이것이 어떻게 작동하는지 이해하지만, 이것은 단지 반복적으로 즉시 서버로 요청을 보내는 유지합니다. 서버에 뭔가가 변경 될 때까지 보류 될 논리가 있어야한다고 생각합니다. 그렇지 않으면보고 할 것이 전혀 없더라도 즉시 응답이 다시 전송됩니다. 순전히 자바 스크립트에서 처리되었거나 서버 측에서 구현되는 것을 놓친 것입니까? 서버에서 처리되는 경우 실제로 서버 실행을 일시 중지하는 것이 좋습니다. 모든 경험에서 이것을 처리하는 더 좋은 방법은 무엇입니까? 내 setTimeout() 메서드로 충분합니까?

나는 웹 소켓에 대해 알고 있지만 아직 광범위하게 지원되지는 않기 때문에 현재의 기술을 고수하고 싶습니다. 당신이 setTimeout했던 것처럼

를 사용하여 클라이언트 측

이 일시 정지 시간을 관리 할 수 ​​

+0

감사합니다. 프레임 워크와 관련없는 일반적인 개념에 대한 좋은 토론을 찾고 있었고 모두 훌륭한 피드백을 제공했습니다. 이렇게 나에게 들리는 것은 추가 된 트래픽이 더 빠른 응답을 할만한 가치가 있는지 여부를 측정하는 것입니다. 필자의 경우 setTimeout이 최상의 절충안 인 것처럼 보입니다. – AceCorban

답변

1

단절 실행이 ... 그것은 사람들의 많은 채팅을하려고하면 서버 자원을 건조으로 이어질 것입니다 아무 일시 중지를 수행하지 ...하지만 더 낮은 지연으로

2

"긴 폴링"에서 길이가 인 부분을 놓쳤습니다. 흥미로운 것이 없다면 서버에 돌아 가지 않아야합니다. 자세한 내용은 this article을 참조하십시오.

1

웹 서버에 대한 열린 연결을 식별하여 HTTP 연결을 사용합니다 (즉, 응답은 서버 측을 차단해야합니다). 빈번하게 '새로운 것이 있습니까?'라는 요청과 대역폭을 소비합니다. 브라우저 기반에서 지원할 수있는 옵션이 있다면 (대부분의 '최신'브라우저 http://caniuse.com/websockets)

1

자바 스크립트 측에서 전통적인 아약스 폴링을 통해 처리하는 적절한 방법은 없습니다. 항상 한쪽 끝에 지연이 있으므로 또는 요청의 양을 줄이려는 경우 다른 하나를 선택하십시오. nodeJS 기반 솔루션을 살펴 보거나 PHP 기반 Ajax Push Engine www.ape-project.org를 살펴보십시오.