2011-04-27 5 views
1

jQuery와 PHP로 "멀티 플레이 세계"를 구축하고 있습니다. 작동 방식은 약간입니다 :jQuery와 PHP로 MySQL 쿼리 양 줄임

  1. 사용자의 캐릭터의 위치가 데이터베이스, 사용자가 적절하게 꾸몄다에서 가져가 (위치 값은 CSS 값은 - 왼쪽 위)

  2. 사용자가 이동 할 수 있습니다 키보드의 화살표 키를 사용하여 jQuery 애니메이션을 사용하여 문자를 이동하는 방법에 대해 설명합니다. 이것이 일어나는 동안 (각 화살표 누름에서) 사용자의 위치 값이 데이터베이스에 삽입되고 업데이트됩니다. 수 있도록하기 위해

  3. 이 "글로벌"당신이 말할 수로, 값이

내가 문제를 AJAX

를 사용하여 각 사용자에 대해 한 번에 모두 업데이트해야 (사용자가 서로를 볼 수 있도록) MySQL 서버에 연결하고 데이터베이스 테이블에서 값을 가져 오는 JavaScript 함수를 계속 호출해야합니다. 그리고이 함수는 항상 setInterval(thisFunction, 1000);을 통해 호출되어야하지만 내 호스트는 서버의 리소스를 오버로드하기 위해 나를 일시 중단했습니다. 그리고 이것이 내 모든 MySQL 쿼리로 인한 것이라고 생각합니다. 또한 데이터베이스에서 값을 반복적으로 가져온 후에도 몇 초마다 값을 삽입해야만 충분한 클라이언트가 로그인하면 시간이 지나면 충돌이 발생할 수 있다고 생각할 수 있습니다. 내가 사용하는 쿼리의 양을 줄이려면 어떻게해야합니까? 내가해야 할 일을하는 또 다른 방법이 있습니까? 고맙습니다.

답변

2

이것은 자원 사용과 관련하여 채팅 시스템과 본질적으로 같습니다. 검색을 시도하면 긴 폴memcached과 같은 개념을 비롯한 다양한 솔루션을 찾을 수 있습니다. 예를 들어 다음 스레드를 확인하십시오. Scaling a chat app - short polling vs. long polling (AJAX, PHP)

0

긴 폴링 - http://en.wikipedia.org/wiki/Push_technology을 조사해야합니다. 이 방법을 사용하면 서버와의 연결을 설정 한 다음 필요할 때만 업데이트 할 수 있습니다. 그러나 매번 업데이트하고 싶다면이 데이터를 저장하는 또 다른 방법을 조사하고 싶을 수 있습니다.하지만 대기업이 얼마나 큰 일을하는지 궁금하다면, 대량의 서버를 처리 할 수 ​​있지만 긴 폴링과 유사한 기술을 사용합니다.

0

웹 소켓을 사용하여이 문제를 해결할 수 있습니다. 이 nettuts tutorial을 확인하십시오.

0

또 다른 방법은 실제 소켓을 에뮬레이션하거나 사용하는 것입니다. 지속적으로 데이터를 가져 오지 않고 (새 레코드가 있는지 확인하기 위해 새로 고침), 당장 Chrome에서 작동하는 WebSockets 이상의 데이터를 푸시 할 수 있습니다 (적어도 제 지식에는 FF4에서 시도하지 않았 음). leaner long pooling은 Node.js입니다. 그런 식으로, 플레이어 간의 통신은 위치를 저장하기 위해 MySQL을 필요로하지 않고 양방향으로 진행됩니다.

0

체크 아웃 사이트에서 Tornado

:

토네이도는 확장 성, 비 블록 웹 서버 및 도구 전원 FriendFeed에서의 오픈 소스 버전입니다. FriendFeed 애플리케이션은 웹과 비슷한 웹 프레임 워크를 사용하여 작성되었습니다.py 또는 Google의 웹 응용 프로그램과 함께 사용할 수 있지만 기본적인 비 블로킹 인프라를 활용할 수있는 추가 도구와 최적화가 필요합니다.

프레임 워크는 비 블로킹 및 합리적으로 빠르기 때문에 대부분의 주류 웹 서버 프레임 워크 (물론 대부분의 파이썬 프레임 워크)와 구별됩니다. 비 차단 및 epoll을 사용하기 때문에 수천 개의 동시 대기 연결을 처리 할 수 ​​있으므로 실시간 웹 서비스에 이상적입니다. 우리는 특별히 FriendFeed의 실시간 기능을 처리하기 위해 웹 서버를 구축했습니다. FriendFeed의 모든 활성 사용자는 FriendFeed 서버에 열린 연결을 유지합니다. 수천 개의 클라이언트를 지원하도록 서버를 확장하는 방법에 대한 자세한 내용은 C10K 문제를 참조하십시오.