2013-10-07 3 views
0

webapp2 웹 프레임 워크를 사용하여 GAE에서 웹 응용 프로그램을 개발 중입니다. 동시에 재생되는 게임의 여러 인스턴스가있는 2 인용 게임입니다. 서버는 두 컴퓨터간에 게임 재생 데이터를주고받을 수있는 경로 역할을합니다. 클라이언트는 HTTP 요청으로 만 서버와 통신합니다.클라이언트가 연결이 끊어 졌는지 감지

이렇게하려면 IP 주소, 쿠키를 사용하여 userId 및 사용자가 게임 인스턴스에 대한 사용자와 사용자의 사용자 이름 (사용자가 가입 한 경우)을 저장하는 테이블을 만듭니다. 그들은 놀고있다.

게임이 끝나기 전까지 (플레이어가이기는 경우까지) 나는 테이블에서 항목을 제거하지 않을 것이지만, 게임이 끝나기 전에 플레이어 중 하나 또는 둘 다 연결이 끊어 지거나 네트워크 오류가 발생하면 어떻게 될까? 플레이어 중 한 명 (또는 두 명 모두)이 종료됩니다.

게임이 더 이상 활성화되어 있지 않아 테이블에서 항목을 제거하고 상대방이 이동하기를 기다리는 것을 플레이어에게 알릴 수있는 방법은 무엇입니까?

+0

에는 킵 얼라이브에 대한 특정 프로세스가 있습니다. http는 stateless입니다. –

+0

@ DanielA.White 이해가 안됩니다. 어떻게하는지 말해 줄 수 있어요? – tMJ

답변

0

당신은 할 수 있습니다

  • last_action < now - x minutes 모든 사용자를 검색하는 방법을 만들어 게임 모델
  • ended = DateTimeProperty()을 추가하고, 현재로 설정하여 사용자 모델에 last_action = DateTimeProperty(auto_now=true)를 추가 ended이 사용자가있는 모든 게임의 속성
  • y 분 이후로 종료 된 모든 게임을 삭제하는 방법을 만듭니다.
  • 실행 클라이언트가 자바 스크립트를 실행할 수있는 경우 주기적 작업을 통해이 방법과 cron

는, 당신은 더 나은 channel service를 보라.

+0

감사합니다. 나는 당신에게 다음과 같이 질문 할 필요가있다. 이전에 아무 대답도받지 못했기 때문에 클라이언트 (브라우저)가'XMLHttpRequest'를 통해 매 2 초마다 서버를 폴링하도록 결정했다. 이 경우, 다른 플레이어가 이동을하게되면, 서버는 그 이동으로 응답 할 것이고 'Seen'행에 상태 메시지 만 반환하게됩니다. 그리고 클라이언트가 존재한다는 표시. 클라이언트가 10 회 정도 폴링을하면 연결이 끊어진 것으로 간주됩니다. 이 접근법에 허점이 있습니까? 더 좋든 나 빠릅니까? 왜. – tMJ

+0

두 플레이어의 연결이 끊어지면 (새 설문 조사가없는 경우) 사용자의 접근 방식으로 게임이 종료되지 않습니다. – greg

+0

예 때때로 데이터베이스를 정리하기 위해 다른 프로세스를 실행하고 싶습니다. 어떻게 처리해야하는지 궁금합니다. – tMJ