2009-08-10 6 views
6

일부 아약스가 많은 사이트 (내가 만든 사이트가 아닌 방문한 사이트)에는 특정 자동 새로 고침 기능이 있습니다. 예를 들어, Gmail에서 새 메시지를 받으면 페이지를 새로 고치지 않고 새 메시지를 볼 수 있습니다. Facebook 브라우저 기반 IM 클라이언트와 동일합니다. 내가 말할 수있는 것부터, 서버 브라우저 바인딩을 처리하는 자바 애플릿이 없기 때문에 AJAX에서 처리 중이며 일부 요소는 인식하지 못한다고 가정합니다. 왜 일부를 설명 할 수있는 (사용할 수있는 업데이트를 확인,역방향 AJAX? 스크립트에 데이터 변경 사항을 '푸시'할 수 있습니까?

  1. 자바 스크립트는 서버 측 스크립트에 지속적으로 "핑 (ping)"을 수행합니다 그래서 내 추측에 의해, 그것은 두 가지 방법으로 이루어집니다 이 페이지 중 다른 페이지는 크롤링 할 수 있습니다). 또는

  2. javascript는 idly by sely이고 서버 측 스크립트는 실제로 브라우저에 모든 업데이트를 "푸시 (push)"합니다. 그러나 이것이 가능한지 확실하지 않습니다. 아직 핑 (ping)하는 AJAX 기능이 있다고 생각 하겠지만, 단순히 "모든 업데이트"를 묻는 것뿐입니다. 서버 스크립트에는 "아니요 (nope)"또는 "당신이 물어서 다행입니다."라고 말하는 간단한 부울이 있습니다. 그러나이 경우 모든 데이터 변경은 스크립트를 직접 호출하여 데이터 변경 준비가 완료되고 해당 부울 함수를 변경해야합니다.

그래서 가능한가/실행 가능/작동 원리는 무엇입니까?

누군가가 이메일/IM/DB 업데이트를 서버로 전송하고, 서버가 스크립트의 URL과 몇 가지 관련 GET 변수를 사용하여 스크립트를 호출하면 스크립트는 변경 사항을 기록하고 "사용 가능한 업데이트"변수를 업데이트합니다. AJAX는 실제로 업데이트가 있다는 응답을받습니다. AJAX는 정상적인 업데이트 스크립트를 실행하고 브라우저에 출력하는 정상적인 "업데이트 페이지"기능을 실행합니다.

js가 a) 1.5 초마다 작업을 수행하는 서버와 b) 1.5 초마다 작업을 수행하는 브라우저가 필요하다는 사실이 비효율적으로 보이기 때문에 묻습니다. 나는 "오, 얘야, 나는 진짜 IM 클라이언트와 똑같이있어!"라고 말할 수있다.

답변

6

Comet

+0

와우, 나는 심지어 같은 catchphrases를 사용했습니다. 그건 거의 당황 스럽네.그러나 PHP에서 이것을 수행하는 방법에 대한 필자의 초기 연구는 무한 루프 스크립트를 언급합니다. 이 유형의 작업을 수행하려면 무한 루프가 라인 어딘가에서 발생해야합니까? 왜 실제로 변경된 데이터 소스 (IMAP 서버, DB, txt 파일 등)가 스크립트가 깨어나서 처리하도록 할 수 있습니까? – Anthony

0

실제로 설명 롱 폴링 기술로 Ajax를 사용하는 작은 .NET 웹 응용 프로그램 작업을했습니다 읽어 보시기 바랍니다.

사용중인 기술에 따라 업데이트가 검색 될 때까지 스레드 신호 메커니즘을 사용하여 요청을 보관할 수 있습니다. ASP.NET의 경우 단일 컴퓨터에서 서버를 실행하므로 Producer 개체 (데이터를 처리하는 스레드가 있음)에 대한 참조를 저장합니다. 데이터 가져 오기를 시작하려면 내 서비스의 Subscribe 메서드가 호출되어 Producer에 등록 된 Consumer 객체가 만들어집니다. 컨슈머가 긴 폴링 모드이면 새로운 데이터를 수신 할 때마다 신호를 보내고 웹 클라이언트가 데이터를 요청할 때마다 먼저 컨슈머는 리셋 이벤트를 대기 한 다음이를 반환합니다.

당신은 PHP에 관해 언급하고 있습니다. - 지속성은 실제로 메모리에 객체를 보관하지 않고 직렬화를 통해 유지된다는 것을 알고 있으므로 $ _CACHE []를 사용하여 Producer 객체를 참조 할 수있는 방법을 모르겠습니다. 또는 $ _SESSION []. PHP로 개발할 때 멀티 스레딩에 대해 전혀 알지 못해서 놀아 보지 못했지만 그걸 살펴볼 수있을 것입니다.

무한 루프를 사용하면 처리 능력이 많이 소모 될 것입니다. 먼저 다른 모든 옵션을 소모합니다.