2011-01-29 3 views
7

나는 항상 긴 폴링 개념을 즐겼다. 내 개발 서버에서 나는 다양한 알림/새로운 게시물 시스템, 각 자바 스크립트를 사용하여 연결을 기다리고 응답의 일종에 대한 연주했습니다. 필자는 항상 많은 구현에서이 문제를 겪었습니다.이 모든 작업에는 mySQL 서버를 반복적으로 폴링하여 새 행을 확인합니다.과도한 데이터베이스 액세스가없는 PHP 긴 폴링

긴 폴링 요청 전용 서버가있을 수 있지만 모든 클라이언트의 데이터베이스 서버를 지속적으로 폴링 (3 초 정도)하는 것은 매우 낭비스러운 것처럼 보입니다. 상대적으로 중요하지 않은 무언가를위한 엄청난 자원 낭비입니다.

타자 방식이 있습니까?

가 실제로 완벽하게 지원되는 것

답변

4

데이터베이스를 통해 이벤트를 알리지 않으려는 특정 문제점이있는 경우 공유 메모리 또는 세마포어를 사용해야합니다.

데이터베이스를 계속 폴링하는 대신 공유 메모리를 모니터링 할 수 있습니다. db (뭔가 메시지 대기열을 가정)에 뭔가 쓸 때, 공유 메모리를 통해 이벤트에 플래그를 지정할 수 있습니다. 청취 코드가이를 감지하고 db 연결 만 설정하여 메시지를 검색합니다. 또는 공유 메모리를 사용하여 데이터베이스 사용을 완전히 대체 할 수 있습니다.

PHP는 세마포어 및 공유 메모리 기능에 대한 참조는 여기 - http://uk.php.net/manual/en/ref.sem.php

0

WebSockets

...; 내가 통지 일부 NoSQL에를 사용합니다)

+0

서버 폴링이 아니라 서버 측에서 데이터를 저장하고 검색하는 것이 문제입니다. – Harold

+0

그럼 분명히 seppo0010의 제안과 함께 갈 것입니다. 그 질문을 그냥 훑어 보는 것만 같아요.) –

+0

어쨌든 지원해 주셔서 감사합니다! – Harold

5

는 새로운 데이터가있다. Redispub/subblocking list을 갖는다.

또한 memcache를 사용하고 데이터를 사용할 수있을 때 새 키를 만들 수 있습니다.

+0

그게 실제로 좋은 생각이야. Memcache에 관해서는 완전히 잊어 버렸습니다. 개발 한 응용 프로그램이 많지 않으므로 Memcache에 대한 이점을 누릴 수있었습니다. Memcache에서 변수를 읽는 것이 확실히 빠를 것입니다. 감사합니다! – Harold

+0

예제를 제공해 주시겠습니까? 나는 결코 그것을 사용하지 않았다. 감사. – moderns

0

데이터 캐시, 나는 그것을 극적으로 소켓을 사용하여 서버와 지속적인 연결을 유지 백그라운드에서 플래시 동영상을 가지고 들여다 수있는 데이터베이스

-1

에서 당겨 감소, 젠드 서버에서 하나를 좋아한다. Java는 소켓도 지원하므로 페이지에 포함 된 Java 애플릿이 될 수도 있습니다.

+0

내가 물었던 것과 아무 상관이 없다. – Harold

0

삽입하거나 데이터베이스가 데이터베이스의 필드에 대한 캐시를 만들 업데이트 할 때마다. 간단한 PHP 기반 캐시 (http://hycus.com/2011/03/31/hcache-a-cache-system-for-php/)를 사용할 수 있습니다.

그런 다음 JQUERY를 사용하여 계속해서 캐시를 폴링 할 수 있습니다.

관련 문제