2010-12-19 3 views
3

저는 Google App Engine 채널 API로 놀아 왔으며 http://rawkets.com/과 유사한 실시간 멀티 플레이어 게임을 만들었습니다. 이 API는 기본적으로 "일방"(영구적 인 브라우저 간 연결을 사용할 수 없음)이므로, 약 30 초마다 새로운 AJAX POST 요청 (JQuery)을 발행하고 있습니다.Google App Engine : 브라우저에서 서버로 영구 연결

가능한 경우 줄일 수있는 큰 오버 헤드 (5-6kb/초)가 생성되는 것으로 보입니다. 이상적으로는 30 초 (appengine 요청 시간 제한) 미만의 시간 동안 지속되는 연결을 하나만 만들고 연결 기간 동안 30 밀리 초마다 새로운 데이터를 계속 보내고 싶습니다. 그런 다음 서버는 채널 API를 사용하여 다른 모든 관련 클라이언트에게 "단어를 확산"합니다. 희망이 어떤 의미가 있습니다!

아이디어가 있으십니까?

+0

기본적으로 HTTP 요청과 비슷한 COMET에 대해 읽습니다. 단, 서버가 응답하는 데 너무 오래 걸리는 경우 (즉, 연결을 계속 열어 둔 상태) –

답변

0

브로드 캐스트는 내장 채널 API를 사용하여 너무 잘 작동하지 않습니다 (메일 링리스트에서 뭔가 작동한다고 말했지만).

타사의 '실제'웹 소켓 공급자를 확인해보십시오. 예 : http://pusherapp.com.

1

직접 수명이 긴 연결을 만드는 데는 두 가지 주요 문제점이 있습니다.

  1. 출력을 서버에서 스트리밍 할 수 없으면 버퍼가 버퍼링되어 sent when the handler exits이됩니다.
  2. 귀하의 요청은 under 1,000ms으로 돌아 가지 않으면 not be auto-scaled입니다.

sje397에 언급 된 것처럼 채널 API는 현재 일반 방송을 지원하지 않으므로 직접 구현해야합니다. 그러나 근처에있는 여러 플레이어에게 푸시하려고하는 경우 자신의 솔루션을 구현하는 것이 문제가 아닐 수도 있습니다.

30ms마다 무엇을하려고합니까? 당신은 아주 잘 설계된 디자인이 필요합니다. 단지 memcache에서 값을 읽고 설정하는 것이 consume close to half of that time으로 갈 것입니다. 데이터 저장소를 쿼리해야하는 경우 be over that 일 수 있습니다.

0

이것은 단순히 HTTP가 작동하는 방식이 아닙니다. 브라우저에서 아직 널리 지원되지 않거나 App Engine에서 전혀 지원되지 않는 (앞으로 출시 될) 웹 소켓 API에 더 가까워 야한다고 생각됩니다.

여전히 클라이언트 당 초당 30 개의 요청이 특히 터무니없이 높습니다. 키보드를 사용하는 단일 사용자가 많은 이벤트를 생성 할 수있는 방법은 없습니다.