2011-12-12 2 views
2

권위있는 서버로 2 인용 턴 기반 게임을 제작하여 게임 상태/논리를 관리하고 싶습니다. 내가 생각하고있는 흐름은 뭔가 같은 :권위있는 게임 서버로 Pusher/Pubnub 사용하기

  • 플레이어는
  • 플레이어는 게임 서버에 직접 HTTP를 통해 자신의 차례를 제출 (유사 pubnub/푸셔/뭔가를 통해) 독특한 게임 채널에 가입
  • 서버는 게임 로직을 실행하고 (두 선수가 가입 한) 게임의 채널
  • 클라이언트는 응답을 처리에 결과를 게시하고 결과
  • 중매 종류의하지만 나를 혼란을 렌더링합니다. 어떤 제안?

이 장면 목록에서 pub/sub 서비스를 사용하는 것이 "올바른"방법입니까? 더 나은 접근법 (서버를 지속적으로 폴링하는 것 이외의 다른 방법)이 있습니까?

답변

1

귀하의 제안은 훌륭하고 "올바른"방법입니다. 귀하가 당면한 어려움은 모바일 스마트 폰과 같은 여러 장치간에 데이터 동기화가 요구되는 컴퓨터 신기원의 초기부터 공유됩니다. 폴링은 천천히 그리고 비싸다 (그리고 많은 수의 플레이어에게는 이해가되지 않는다). 멀티 플레이어 게임은 플레이어를 연결하고 게임 룸을 제공해야하는 좋은 예입니다. 해결책은 다음과 같습니다.

  1. 게임 룸을 만들고 게임 룸에 참여할 수있는 게임 로비를 만듭니다.
  2. 은 (빠른 가입) 선수의 자동 쌍 만들기 [추천]

당신은 Socket.IO와 다른 오픈 소스 옵션과 같은 제품이 기술적 인 문제를 해결할 수 있습니다. 그러나 Node.JS 서버를 배포하고 Express에 연결하는 데 집중하는 대신 게임을 만들면됩니다.

대신 구름 서비스 (PubNub, PusherApp 또는 Beacon Push)를 사용하십시오. Pub/Sub API를 사용하여 멀티 플레이 환경에서 사용자를 쉽게 동기화하십시오.

2

이것은 우리 사무실에서 뜨거운 주제입니다! 저는 PubNub를 채널 이름의 독창적 인 선택을 사용하여 권위있는 게임 서버로 사용했습니다. 다음과 같이 작동합니다 :

  1. 콘텐츠를 제공하고 신뢰할 수있는 엔터티 역할을하는 node.js 서버를 실행합니다 (노드 일 필요는 없습니다).
  2. 클라이언트가 연결되면 UUID를 생성하고 (서버 측 또는 클라이언트 측에서 수행 할 수 있음) 클라이언트와 서버 모두 해당 채널에서 수신 대기하도록합니다 (예 : "my_game_ [UUID]").
  3. 다른 클라이언트가이 채널 이름을 알고 있지 않기 때문에 클라이언트와 서버는이 채널에서 자유롭게 통신 할 수 있습니다.
  4. 서버는 모든 사람과 대화 할 수 있으며 클라이언트는 서버를 통해 보안 조치를 수행하고 "안전하지 않은"바닐라 pubnub 채널을 사용하여 서로 통신 할 수 있습니다.
+0

그건 제가 염두에 두었던 것입니다. 그러나 클라이언트에서 서버로 데이터를 전송하는 것은 기술적으로 pubnub 이상일 필요는 없습니다. 간단한 http 요청 일 수 있습니다. – ehud