2011-01-13 2 views
1

현재 특정 팀의 하키 게임 중에 사람들이 열 수있는 웹 사이트가 있습니다. 하키 팀이 점수를 매기면 지정된 사람이 안전한 위치에있는 버튼을 클릭합니다. MySQL 데이터베이스의 단일 항목을 현재 타임 스탬프로 업데이트합니다.수백 명의 사용자가 매 순간 액세스 할 수있는 PHP 변수를 저장하는 방법은 무엇입니까?

웹 사이트의 프런트 엔드에는 데이터베이스에 해당 타임 스탬프를 쿼리하는 PHP 스크립트에 15 초마다 실행되는 비동기 호출이 있습니다. 그런 다음 스크립트는 현재 시간을 가져온 타임 스탬프와 비교하고 현재 타임 스탬프보다 15 초 이내에있는 경우 웹 페이지에서 에어 혼 소리를 재생하고 팀의 목표 곡을 짧은 클립으로 재생하는 이벤트를 트리거합니다.

일반적으로 팀 게임 중에 나는 많은 양의 트래픽을 얻지 만, 많은 사람들은 사운드가 트리거되기 위해 목표 점수를 매긴 후 (최대) 15 초 지연에 대해 불평합니다. 그 문제를 해결할 방법을 찾고 싶습니다.

분명히, 나는 페이지에있는 모든 단일 사용자에 대해 데이터베이스를 1 초마다 쿼리한다고 생각하지 않습니다. 내 데이터베이스를 죽일 것 같아. 그래서, 내 결과를 얻을 수있는 또 다른 방법이 있습니까? 데이터베이스 또는 파일 시스템 읽기를 사용하는 부정적인 결과없이 각 세션에서 가져올 수있는 PHP 변수를 서버 메모리에 배치 할 수 있습니까?

편집 : 내 호스트에 사용할 수있는 memcached이 없으며 설치할 수 없습니다. 그것은 그것이 최적의 솔루션이었을 것처럼 들리므로 실망 스럽습니다. 누구든지 내가 볼 수있는 대안 아이디어가 memcached을 사용하지 않는가?

답변

5

이렇게하려면 Comet으로 알려진 기술을 사용하고 싶습니다. 그다지 어렵지는 않지만 약간의 노력이 필요합니다.

기본적으로 15 초마다 연결을 다시 열지 않고 각 브라우저에 대해 실시간 연결을 유지합니다. 이렇게하면 연결에 즉시 쓸 수 있습니다.

"Comet"과 "PHP"에 대한 Google과 당신은 좋은 자원을 찾아야합니다. http://www.zeitoun.net/articles/comet_and_php/start은 철저하게 보입니다.

+1

+1. 내가 말할 수있는 한 다른 대답보다 훨씬 좋지만 여전히 반복적 인 재 연결이 필요합니다. 아! –

+1

@Tomalak Geret'kal 오히려 그의 서버가 많은 동시 연결을 처리 할 수 ​​있는지 여부에 달려 있지 않습니까? –

+0

@middaparka :별로. 너가 그 (것)들을 피할 수있는 경우에, 왜 너는 않? 대기 시간 및 폴링/샘플 속도의 문제/문제/질문은 존재하지 않습니다. –

7

이 경우 memcache과 같이 객체화된 형태로도 사용할 수있는 memcached과 같은 것이 가장 완벽한 솔루션인데 설계 목표 중 하나는 "동적 웹 응용 프로그램에서 데이터베이스로드를 줄이는 것"입니다.

memcached에 대한 자세한 내용은 main web site에서 확인하거나 위 링크를 사용하여 PHP 모듈을 조사 할 수 있습니다.

+0

정말이 답변을 수락하고 싶습니다. 정확하고 내 질문에 답하기 위해 완벽하게 작동하기 때문입니다. 그러나,'memcached'를 제안한 후에, 나는 그것을 조사하기 시작했는데, 그것은 내 호스트에서 사용할 수 없기 때문에 그것을 설치할 수 없습니다. 우연히 다른 가능한 해결책을 모를 것입니까? –

+1

@mririgo 나는 두려워하지 않는다. - 이것은 보통 이러한 경우에있어서 가장 중요한 곳이다. 호스팅 제공 업체에 옵션으로 추가하는 방법을 생각해보십시오. –

+1

@mririgo APC (대체 PHP 캐시)를 사용할 수 있는지 확인하십시오. – lonesomeday

0

http://memcached.org/입니다. 이것은 시스템의 오브젝트, 배열 및 변수에 대한 빠른 램 기반 데이터 액세스를 위해 직접 작성됩니다. 동시 업데이트를 수행하는 동안 MySQL의 부하를 차단합니다.

0

잠금을 해제하지 않고 "100+"요청을 읽는 것만으로도 그만큼 크지 않습니다. 스트레스 테스트 만하는 것을 고려 했습니까?

관련 문제