2012-09-21 2 views
1

저는 웹 개발의 세계로 들어서서 연결된 사용자가 객체 (현재는 삼각형)를 제어 할 수있게 해주는 작은 브라우저 게임을 개발하고 있습니다. 단순히 화면 영역을 돌아 다니십시오.JavaScript : 연결된 클라이언트 변수를 안정적으로 업데이트하는 방법

현재 클라이언트 좌표를 MySQL 데이터베이스에 저장하고 AJAX를 사용하여 초당 대략 30 번 위치를 업데이트합니다.

다른 클라이언트 위치도 대략 초당 30 회 폴링됩니다.

그러나 내 문제는 이것이 내 호스트의 끝에서 자동으로 발생한다고 가정하는 클라이언트에 대해 1 시간 동안 긴 IP 잠금을 유발하는 것 같습니다. 이것은 아마도 일반적인 기본 예방 조치일까요? 나는 AJAX 30 개 투표가 특히 스트레스가 많은 것은 아니라고 생각했지만, 이것이 나를위한 새로운 분야라고 언급했다. 나는 약간의 DOS 공격을 만들었습니다.

그렇다면이 문제에 경험이있는 사람이 나와 설명한 상호 작용의 유형을보다 효율적으로 처리 할 수있는 방법을 가르쳐 주시면 감사하겠습니다. 이것은 모두 6 개월짜리 프로젝트로 이어지고 있습니다. 저는 마지막 학년도 대학 프로젝트를 위해 혼자서 일할 것입니다. 그래서 더 나은 해결책을 배우기 위해 여분의 시간을 할애하게되어 기쁩니다.

+0

서버 측 플랫폼은 무엇입니까? 웹 소켓 사용을 고려하고 싶을 수도 있습니다 https://developer.mozilla.org/en-US/docs/WebSockets – balafi

+0

호스트는 Linux 플랫폼을 실행합니다. 이는 다른 잠금으로 인해 향후 30 분 동안 제공 할 수있는 많은 정보입니다 . WebSockets을 살펴 보았지만 MySQL 자체에 연결할 수 없다는 것을 알고 있습니다. 내가 틀렸다면. – LBHoward

답변

1

"하이브리드 폴링"이라고해야 할 일은 무엇입니까? 기본적으로 33ms (30 회/초)마다 한 번씩 실행되는 "무한"루프를 실행하는 장시간 실행 방식의 서버가 있습니다. 이 루프는 데이터가 변경된 경우 프런트 엔드의 일부로 데이터를 가져옵니다. 메서드가 처리 할 데이터가 버퍼에서 너무 커지면 메서드가 종료됩니다. 새로운 데이터가 작성되었는지 확인하기 위해 클라이언트가 폴링하는 전체 시간. 메서드가 종료되면 클라이언트는 메서드를 다시 시작해야합니다. 이것은 하이브리드 방식입니다. 클라이언트 폴링은 메소드가 종료 될 때를 제외하고는 클라이언트 측 데이터 만 검사합니다.이 경우 클라이언트는 다시 폴링하여 서버 메소드를 재시작해야합니다. 그러면 서버 메소드가 33ms마다 한 번 실행되어 클라이언트로 데이터가 푸시됩니다. .

+0

서버 측을 실행하는 것에 대해 이야기하는 기사가 많이 있지만이를 달성하는 방법에 대한 자세한 내용은 아닙니다. 구체적으로 무엇을 의미합니까? 내 도메인과 서버는 별도의 회사를 통해 호스팅됩니다. 서버 측을 배포하려면 어떤 도구가 필요합니까? 내 호스트는 XILO입니다. 또한이 데이터는 내 도메인의 웹 디스크에있는 일종의 캐시에 상주합니까? 나는 제안 된 방법을 이해하기 위해 막연하게 온다, 나는 단지 발을 축축하게하고 예를 시험해 볼 필요가있다. 의견을 보내 주셔서 감사합니다! – LBHoward

+0

@LBHoward - 코드 서버 측에 어떤 통제권이 있습니까? 그렇지 않다면 당신은 단지 클라이언트 쪽을 폴링하고 당신이 그것을 오버로드한다면 당신은 서버를 잠글 것이다. 서버 측 코드에 영향을 줄 수있는 경우 버퍼 크기가 클라이언트에 기록 된 응답과 관련이있는 일부 버퍼 크기가 채워질 때까지 실행되는 while 루프를 사용하게됩니다. –

+0

나는 서버 코드에 액세스 할 수 없다고 생각합니다. 브라우저 기반 cPanel X를 통해 내 관리에 액세스하고 phpMyAdmin을 통해 MySQL에 액세스합니다. – LBHoward

0

다른 접근법을 위해 Comet (이전 브라우저와 호환 가능하지만 가능한 한 효율적이지 않음), BOSH 또는 Web Sockets (이상적이지만 이전 브라우저와 호환되지 않음)을 찾습니다.

관련 문제