2012-04-15 3 views
3

인터넷 검색을 실시간으로 페이스 북과 같이 보내야하는 웹 사이트가 있습니다. 인터넷 검색을 더 많이 수행 한 후 푸시 앤 풀 기술에 관한 많은 설명서를 발견했습니다. 이 문서에서 Ajax 또는 소켓을 사용하여 구현하는 방법을 발견했습니다. 내 경우에 무엇을 사용하는 것이 가장 좋은지 그리고 자바 스크립트 나 jquery와 PHP를 사용하여 코딩하는 방법을 알아야한다.Ajax 또는 Socket을 사용하여 기술을 밀고 당길 수 있습니다.

답변

0

jQuery를 사용하여 긴 폴링 기법을 적용하면됩니다.

소켓은 아직 어디에서나 지원되지 않으며 서버가 작동하려면 수신 소켓을 열어야합니다.

+0

은 실시간으로 긴 풀링을 지원합니다. 어떻게 구현 될 수 있습니까? –

2

귀하의 사례를 자세히 알지 못하면 귀하의 케이스에서 가장 유용한 것을 말할 수 없습니다.

대부분의 경우 클라이언트가 1 ~ 2 초마다 서버에 확인하여 새 메시지가 있는지 묻는 것으로 충분합니다. 나는 모든 웹 서버에서 구성 변경없이 그리고 AJAX를 지원하는 모든 브라우저, 심지어 오래된 서버에서도 작동하기 때문에 대부분 소켓에 비해 선호합니다.

모든 클라이언트가 서버에 열린 소켓을 필요로하기 때문에 클라이언트가 거의없고 실제로 실시간을 원할 경우 웹 소켓을 사용할 수 있습니다. 다음과 같은 PHP 구현이 있습니다. http://code.google.com/p/phpwebsocket/

+0

나의 케이스는 페이스 북과 Stackoverflow와 동일하다. 내 질문에 대답했을 때 내 알림을 보냈는데, 나는 이런 식으로해야하고, 내 웹 사이트에는 그리 많지 않은 사용자가 많을 것으로 예상된다. –

+0

페이스 북과 같이 "무제한 서버 기능"을 갖고 있다면 이전 버전의 브라우저를위한 대체 솔루션이있는 소켓을 선택합니다. 그렇지 않은 경우 사용자에게 실제로 중요한 의미를 부여하기 위해 1 초 또는 그 이하의 지연이 있습니다 (원하는 경우 250ms마다 업데이트를 확인할 수도 있습니다). 그렇다면 소켓을 선택하십시오. 그렇지 않다면 주기적으로 AJAX 요청을 선택하십시오. –

2

로그인 한 사용자 당 하나의 브라우저 만 열리도록하려면이 긴 폴링 기법을 쉽게 적용 할 수 있습니다. Ajax 호출에 대한

정책 :

  1. 요청 2 초마다하지 마십시오.
  2. 그러나 이전 요청에서 응답을받은 지 2 초 후에 만 ​​대기하고 요청하십시오.
  3. 요청이 12 초 이내에 응답하지 않으면 기다리지 말고 새로운 요청을 보내십시오. 연결이 끊어진 경우입니다. 서버 응답에 대한

정책 : 즉시

  1. 가있는 경우 업데이트 응답. 업데이트가 세션에 의존하는지 확인하는 것; (클라이언트 쪽에서 최신 메시지를받은 것과 같은 힌트를 보낼 수 있다면이 두 번째 업데이트 확인 메커니즘을 통해 위에서 설명한대로 단일 브라우저를 열지 못하게 할 수 있습니다.)

  2. 그렇지 않으면 sleep() (무한 루프를 사용하지 않고 수면을 사용하지 마십시오) 업데이트가 있는지 확인하십시오. 업데이트가 응답하는 경우; 1 초 동안 다시 잠을 자지 않으면; 총 십초 때까지이 작업을 반복 경과 후 어떤 업데이트에 다시 응답했다

이 정책 (일반적으로 롱 폴링라고도 함), 당신은 부하가 4 %로 95 %로 감소 프로세서 사용을 찾을 수 있습니다을 적용하는 경우 케이스.

희망 사항입니다. 행운을 빌어 요.

+0

답장을 보내 주셔서 감사합니다. 그러나 다른 문제가 발생하여 업데이트를 확인할 수있는 방법이 있습니다. 사용하는 절차는 각 웹 사이트에 페이지가 있습니다. 사용자가 자신의 페이지를 추가, 삭제 또는 업데이트 할 때 페이지 팔로워에게 알림을 보내야합니다. 내 데이터베이스에 알림 저장을위한 테이블이 있습니다. 당신이 말한대로 업데이 트를 얻으려면 나는 업데이 트가 있는지 여부를 확인하기 위해 서버 측에 각 1 초 데이터베이스에 액세스해야합니다. 데이터베이스에 액세스하지 않고 업데이트를 얻을 수있는 또 다른 방법이 있습니까? –

+0

파일 잠금으로 공유 메모리를 시도 할 수 있습니다. 하지만 대부분의 시간 동안 서버 측에서 자고 있고 쿼리를 실행하는 데 몇 초 정도만 깨어있는 상태로 기다리지 않기를 바랍니다. TCP 핸드 쉐이크는 PHP 처리보다 시간이 오래 걸리므로 우리는 각 핸드 쉐이크 (syn-fin) 사이에서 오래 기다리는이 긴 폴링 기법을 사용합니다. –

+0

은 데이터베이스에 액세스하고 있으며 1 초마다 데이터베이스에 많은로드가 발생 했습니까? 1000 사용자가 평균 1000 데이터베이스 액세스/초라고 가정 할 경우 –

관련 문제