2009-09-16 4 views
1

저는 아주 기본적인 Ajax 업데이트를 브라우저에 적용하기 위해 Comet 또는 Long-Polling보다 간단한 방법을 찾고있었습니다.Javascript 타이머 및 Ajax 폴링/스케줄링

제 연구에서 사람들은 실제로 Javascript 타이머를 사용하여 정해진 간격으로 Ajax 호출을 보냈 음을 알았습니다. 이것은 나쁜 접근입니까? 거의 너무 쉬워 보입니다. 또한 전송할 업데이트가 중요한 데이터는 아니지만 몇 시간 동안 실행될 수있는 프로세스를 모니터링합니다.

예를 들어,이 디자인을 사용하여 3 시간 동안 10 초마다 ajax 호출을 보내는 것이 신뢰할 수 있습니까?

감사합니다, 브라이언

답변

3

은 일반적으로 Ajax를 통해 페이지의 콘텐츠를 업데이 트 타이머를 사용하여 적어도 강력한 혜성 같은 수명이 긴 스트림 연결에 의존 등이다. 방화벽, 짧은 DHCP 임대 등은 모두 영구 연결을 중단 할 수 있지만 폴링은 각 요청에 대해 클라이언트 연결을 다시 설정합니다.

폴링은 종종 서버에서 더 많은 리소스를 필요로한다는 단점이 있습니다. 10 초마다 업데이트를 폴링하는 소수의 고객조차도 일반 대화 형 사용자보다 서버에 더 많은 부하를 가할 수 있습니다. 몇 분마다 새 페이지를로드 할 가능성이 높으며 다른 사이트로 이동하기 전에 시간을 절약 할 수 있습니다 . 하나의 데이터 포인트로서 작년에 썼던 간단한 Sinatra/Ajax 장난감 응용 프로그램은 일반적인 "텍스트"페이지에 하루에 3-5 명의 순 방문자가 있었지만 Ajax 콜백 URL은 서버의 모든 사이트에서 가장 많이 요청 된 부분이되었습니다 (또는 그 이상) 더 높은 트래픽의 순서를 가진 여러 사이트를 포함합니다.

폴링으로 인한로드를 최소화하는 한 가지 방법은 가능한 경우 Ajax 콜백 서버 코드를 일반 사이트 코드에서 분리하여 자체 응용 프로그램 서버 프로세스에서 실행하는 것입니다. 이 "서비스 미들웨어"서비스는 서버 스레드/Apache 리스너/etc를 포기하기보다는 폴링 콜백을 처리 할 수 ​​있습니다. 효과적으로 "우리는 아직 거기에 있습니까?"

당연히 한 번에 설문 조사 서비스를 사용하는 사용자의 수가 적을 것으로 예상되는 경우 (10 세 이하) 동일한 서버 프로세스에서 계속 실행하십시오.

+0

감사합니다. 나는 분명히 10 명 이상의 사용자를 계획 할 필요가있다. 새 응용 프로그램 서버 프로세스를 설정하는 방법을 배우기 시작할 때 어떤 권장 사항이 있습니까? – Brian

+0

그냥 응용 프로그램 스택의 다른 인스턴스를 배포하는 것입니다.예를 들어 Apache에서 PHP를 실행하는 경우 Ajax 요청만을 제공하는 가상 호스트에 대해 별도의 docroot를 사용하고 나머지 응용 프로그램 코드는로드하지 않습니다. Java 응용 프로그램의 경우 콜백 만 처리하는 독립형 서블릿을 사용하십시오. Ajax 처리기의 공간을 최소화하십시오. 그러면 서버 자원을 훨씬 늘릴 수 있습니다. – rcoder

+0

오 ~ 고맙습니다. 대단히 감사합니다. 매우 도움이됩니다. – Brian

0

여기 유용 할 수있는 한 가지 점은 변경되지 않은 간격으로 폴링하는 것이 간단하지만 종종 불필요하거나 바람직하지 않다는 것입니다.

내가 최근에 실험 한 한 가지 방법은 설문 조사에 긍정적이고 부정적인 피드백을 보내는 것입니다. 본질적으로 업데이트는 활성 (변경 사항 발생) 또는 수동 (변경 사항이 더 이상 적용되지 않아 아무 것도 필요하지 않음)입니다. 수동 업데이트는 폴링 간격을 늘립니다. 활성화 된 업데이트는 폴링 간격을 기준 값으로 다시 설정합니다.

예를 들어, 내가 작업하고있는이 채팅에서 다른 사용자가 메시지를 게시합니다. 폴링 간격은 5 초의 높은 값에서 시작됩니다. 다른 사이트 사용자가 채팅하는 경우 5 초마다 업데이트됩니다. 활동이 느려지고 최신 메시지가 표시된 이후로 아무도 채팅을하지 않으면 폴링 간격이 매회 약 1 초씩 느려지고 느려지고 결국 3 분마다 한 번에 한 번에 한 번씩 캐핑됩니다. 한 시간 후 다른 사람이 채팅 메시지를 다시 보내면 폴링 간격이 갑자기 5 초로 줄어들고 느려집니다.

높은 활동 -> 빈번한 폴링. 낮은 활동 -> 결국 매우 드문 폴링.