문제

작고 기본적인 "Ajax"기반 멀티 플레이어 게임을 만들려고합니다. 객체의 좌표는 PHP "핸들러"에 의해 제공되고 있습니다. 이 handler.php 파일은 ajax를 사용하여 200ms마다 투표됩니다.

아무 일도 일어나지 않을 때 투표 할 필요가 없기 때문에 자주 투표하지 않고도 같은 일을 할 수있는 일이 있습니까? 예를 들어. 혜성, 혜성에 대한 서버 측 응용 프로그램을 구성해야한다고 들었습니다. 공유 웹 서버이므로 그렇게 할 수 없습니다.

클라이언트에서 아무것도 변경할 필요가 없다면 handler.php 파일이 응답을 반환하는 것을 방지 할 수 있습니까? 그런 다음 다시는 아직 변경되지 않았음에도 불구하고 클라이언트가 응답을 쓸모없는 요청을 계속했습니다. 기본적으로 클라이언트에게 무언가를 말해야하는 경우 대역폭과 중증 리소스 만 사용해야합니다. 객체의 좌표 변경.

도움이 되었습니까?

해결책

다음은 해결책입니다. WebSync 주문형. 서버 리소스가 모두 오프로드되어 있으므로 걱정, 공유 호스팅 여부에 대해 걱정하지 않으며 필요에 따라 정보를 푸시 할 수 있습니다.

SaaS이므로 모든 서버 언어로 작동합니다. PHP의 경우 이미 출판사가 작성되어 준비가되어 있습니다.

다른 팁

혜성은 일반적으로 이런 종류의 일에 사용되며, 특히 일반적인 기술이 아니기 때문에 깨지기 쉬운 설정이 될 수 있으므로 "올바르게 얻지 못하도록 쉽지 않을 수 있습니다". 즉, 2 년 전에 마지막으로 시도했을 때보 다 더 많은 리소스가 있습니다.

나는 당신이 생각하는 일을 할 수 있고 handler.php가 단순히 아무것도 반환하지 않고 실행을 중지 할 수 없다고 생각합니다. 웹 서버는 연결을 열어두고 handler.php가 무언가를 수행 할 때까지 추가 폴링을 방지합니다 (종료 또는 출력 제공 ). 그렇다면 여전히 응답을 처리하고 있습니다.

Ajax가 매우 큰 시간 초과 (예 : 30 초)를 허용하고 handler.php가보고 할 내용이있을 때까지 응답하지 않고 회전하는 긴 폴링 기술을 시도 할 수 있습니다. (회전이 자원 집약적이지 않은지 확인하고 싶을 것입니다). handler.php가 "만료"되고 아무 일도 일어나지 않으면 종료하고 Ajax가 다시 설문 조사를하도록하십시오. 30 초마다 발생하기 때문에 초당 ~ 5 배에 걸쳐 크게 개선됩니다. 그것은 당신의 여론 조사를 최소한으로 유지할 것입니다.

그러나 그것은 혜성이 설계된 것입니다.

AJAX는 클라이언트 서버 요청 모델 (일반적으로 푸시보다는 PULL이라고 함) 만 제공하므로 서버에서 데이터를 가져 오는 유일한 방법은 요청을 통해입니다. 그러나이를 해결하는 일반적인 기술은 서버가 새로운 데이터가있을 때만 응답하는 것입니다. 따라서 클라이언트는 요청을하고 서버는 어떤 일이 발생하고 답장 할 때까지 해당 요청에 매달려 있습니다. 이는 클라이언트가 응답을받은 후 새 요청을 보내야하므로 데이터가 변경되지 않은 경우에도 빈번한 폴링이 필요합니다.

PHP를 사용하고 있으므로 간단한 방법 중 하나는 PHP 코드가 데이터 변경 사항 검사 사이에 한 번에 200ms의 Sleep 명령을 호출 한 다음 변경 될 때 클라이언트에 데이터를 반환하는 것일 수 있습니다.

편집 : 요청에 대한 타임 아웃도 권장합니다. 따라서 2 초 동안 아무 일도 일어나지 않으면 "변경 사항 없음"메시지가 다시 전송됩니다. 그렇게하면 클라이언트가 서버가 여전히 살아 있고 요청을 처리하고 있음을 알고 있습니다.

이것은 "html5"로 표시되므로 : html5는 <eventsource> 그리고 웹 소켓, 그러나 구현 측면은 실제로 미래의 시제에 있습니다.

Opera는 이전 버전을 구현했습니다 <eventsource> ~라고 불리는 <event-source>.

서버는 이것에 참여해야합니다. 호스팅 제공 업체에게 사용할 수있는 모듈을 확인하십시오. 또는 혜성을지지하도록 설득하려고 노력하십시오.

아마도이를 위해 소규모 가상 개인 서버 (VP)를 고려해야 할 수도 있습니다.

긴 폴링 제안을 추가해야 할 한 가지 : 공유 서버에있는 경우이 솔루션은 각 활성 긴 설문 조사가 연결 (및 해당 연결 서비스를위한 서버 측 프로세스)을 활성화하므로 확장 성이 제한됩니다. 귀하의 제공 업체는 아마도 한 번에 열 수있는 연결 수에 대한 한계 (정책 정의 또는 사실상)가있을 가능성이 높으므로 동시에 연주하는 것보다 더 많은 세션/창이 있으면 벽에 부딪칩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top