Amazon GameLift Servers와 게임 클라이언트/서버 상호 작용 - Amazon GameLift Servers

Amazon GameLift Servers와 게임 클라이언트/서버 상호 작용

Amazon GameLift Servers 호스팅 솔루션의 구성 요소는 플레이어 수요에 따라 게임 세션을 실행하는 특정 방식으로 서로 상호 작용합니다. 이 주제에서는 Amazon GameLift Servers 관리형 EC2 플릿, 자체 관리형 Amazon GameLift Servers Anywhere 플릿 또는 하이브리드 솔루션에서 게임 서버를 호스팅할 때 구성 요소가 서로 통신하는 방법을 설명합니다.

호스팅 솔루션 구성 요소에는 게임 서버, Amazon GameLift Servers 서비스, 클라이언트 측 백엔드 서비스 및 게임 클라이언트가 포함됩니다. 게임 서버는 Amazon GameLift Servers 서버 SDK를 사용하여 Amazon GameLift Servers 서비스와 상호 작용합니다. 백엔드 서비스는 Amazon GameLift Servers 서비스 API(AWS SDK의 일부)를 사용하여 게임 클라이언트를 대신하여 서비스와 상호 작용합니다. 게임 세션 연결 시 게임 클라이언트가 게임 세션의 고유한 IP 주소와 포트 번호를 사용하여 게임 세션에 직접 연결합니다.

상호 작용 다이어그램

다음 다이어그램은 Amazon GameLift Servers 서비스가 게임 서버 가용성 상태를 추적하고 플레이어 수요에 대응하여 게임 세션을 시작할 수 있도록 게임 호스팅 구성 요소가 상호 작용하는 방법을 보여줍니다.

이 주제에서 설명하는 키 상호 작용을 위한 게임 클라이언트/서버 동작

상호 작용 동작

다음 섹션에서는 각 키 상호 작용의 이벤트 시퀀스를 설명합니다.

게임 서버 프로세스 초기화

시작 시 게임 서버 프로세스가 Amazon GameLift Servers 서비스와의 통신을 설정하고 게임 세션을 호스팅할 준비가 되었다고 상태를 보고합니다.

  1. 게임 서버 실행 파일의 새 프로세스가 호스팅 리소스에서 실행되기 시작합니다.

  2. 게임 서버 프로세스는 다음 서버 SDK 작업을 순서대로 호출합니다.

    1. InitSDK()로 서버 SDK를 초기화하고, 서버 프로세스를 인증하며, Amazon GameLift Servers 서비스와의 통신을 설정합니다.

    2. ProcessReady() 게임 세션을 호스팅할 준비가 되었음을 알립니다. 또한 이 호출은 프로세스의 연결 정보, 게임 클라이언트가 게임 세션에 연결하는 데 사용하는 정보 및 기타 정보를 보고합니다.

    그런 다음 서버 프로세스가 Amazon GameLift Servers 서비스의 프롬프트를 기다립니다.

  3. Amazon GameLift Servers가 새 게임 세션을 호스팅할 수 있도록 서버 프로세스의 상태를 ACTIVE로 업데이트합니다.

  4. Amazon GameLift Servers가 onHealthCheck 콜백을 주기적으로 호출하여 서버 프로세스에서 상태를 요청하기 시작합니다. 이러한 호출은 서버 프로세스가 활성 상태로 유지되는 동안 계속됩니다. 서버 프로세스는 1분 내에 정상 또는 비정상을 보고해야 합니다. 서버 프로세스가 정상 상태가 아니거나 응답하지 않는 경우 Amazon GameLift Servers 서비스가 서버 프로세스의 활성 상태를 변경하고 게임 세션 시작 요청 전송을 중지합니다.

게임 세션 생성

Amazon GameLift Servers 서비스는 플레이어의 게임 플레이 요청에 따라 새 게임 세션을 시작합니다.

  1. 게임 클라이언트를 사용하는 플레이어가 게임 세션 연결을 요청합니다. 게임이 플레이어 연결 프로세스를 처리하는 방식에 따라 게임 클라이언트가 백엔드 서비스에 요청을 보냅니다.

  2. 플레이어 연결 프로세스에서 새 게임 세션을 시작해야 하는 경우 백엔드 서비스가 Amazon GameLift Servers 서비스에 새 게임 세션에 대한 요청을 보냅니다. 이 요청은 서비스 API 작업 StartGameSessionPlacement()를 호출합니다. (또는 백엔드 서비스가 StartMatchmaking() 또는 CreateGameSession()을 호출할 수 있습니다)

  3. Amazon GameLift Servers 서비스가 PENDING 상태의 새 GameSessionPlacement 티켓을 생성하여 응답합니다. 티켓 정보를 백엔드 서비스에 반환하여 배치 티켓 상태를 추적하고 게임 세션이 플레이어를 위해 준비된 시점을 확인할 수 있습니다. 자세한 내용은 게임 세션 배치의 이벤트 알림 설정 섹션을 참조하세요.

  4. Amazon GameLift Servers가 게임 세션 배치 프로세스를 시작합니다. 어떤 플릿을 조회할지 식별하고 해당 플릿에서 게임 세션을 호스팅하지 않는 활성 서버 프로세스를 검색합니다. 사용 가능한 서버 프로세스를 찾으면 Amazon GameLift Servers 서비스가 다음을 수행합니다.

    1. 게임 세션 설정과 배치 요청의 플레이어 데이터로 GameSession 객체를 생성하고 상태를 ACTIVATING으로 설정합니다.

    2. 서버 프로세스에 게임 세션을 시작하라는 메시지를 표시합니다. 서비스가 서버 프로세스의 onStartGameSession 콜백을 호출하고 GameSession 객체를 전달합니다.

    3. 서버 프로세스의 게임 세션 수를 1로 변경합니다.

  5. 서버 프로세스가 onStartGameSession 콜백 함수를 실행합니다. 서버 프로세스가 플레이어 연결을 수락할 준비가 되면 서버 SDK 작업 ActivateGameSession()을 호출하고 플레이어 연결을 기다립니다.

  6. Amazon GameLift Servers 서비스는 서버 프로세스의 연결 정보로 GameSession 객체를 업데이트하고(ProcessReady()에 대한 호출이 보고한 대로) 게임 세션 상태를 ACTIVE으로 설정합니다. 또한 GameSessionPlacement 티켓 상태를 FULFILLED로 업데이트합니다.

  7. 백엔드 서비스가 DescribeGameSessionPlacement()를 호출하여 티켓 상태를 확인하고 게임 세션 정보를 가져옵니다. 게임 세션이 활성화되면 백엔드 서비스가 게임 클라이언트에 알리고 게임 세션 연결 정보를 전달합니다.

  8. 게임 클라이언트가 연결 정보를 사용하여 게임 서버 프로세스에 직접 연결하고 게임 세션에 연결합니다.

게임에 플레이어 추가

게임은 플레이어 세션을 선택적으로 사용하여 게임 세션에 대한 플레이어 연결을 추적할 수 있습니다. 플레이어 세션이 개별적으로 또는 게임 세션 배치 요청의 일부로 생성될 수 있습니다.

  1. 백엔드 서비스가 게임 세션 ID를 사용하여 서비스 API 작업 CreatePlayerSession()을 호출합니다.

  2. Amazon GameLift Servers 서비스가 게임 세션 상태(반드시 ACTIVE)를 확인하고 게임 세션에서 열린 플레이어 슬롯을 찾습니다. 슬롯이 발견되면 서비스가 다음을 수행합니다.

    1. 새로운 PlayerSession 객체를 만들고 상태를 RESERVED로 설정합니다.

    2. 플레이어 세션 정보를 사용하여 백엔드 서비스 요청에 응답합니다.

  3. 백엔드 서비스가 플레이어 세션 정보와 게임 세션 연결 정보를 게임 클라이언트에 전달합니다.

  4. 게임 클라이언트가 연결 정보와 플레이어 세션 ID를 사용하여 게임 서버 프로세스에 직접 연결하고 게임 세션에 연결합니다.

  5. 게임 클라이언트 연결 시도에 대한 응답으로 게임 서버 프로세스가 서비스 API 작업 AcceptPlayerSession()을 호출하여 플레이어 세션 ID를 검증합니다. 서버 프로세스가 연결을 수락하거나 거부합니다.

  6. Amazon GameLift Servers 서비스가 다음 중 하나를 수행합니다.

    1. 연결이 수락되면 Amazon GameLift Servers가 PlayerSession 상태를 ACTIVE으로 설정하고 PlayerSession을 게임 서버 프로세스에 전달합니다.

    2. 게임 서버 프로세스가 원래 CreatePlayerSession() 요청 후 특정 기간 내에 플레이어 세션 ID에 대한 AcceptPlayerSession()을 호출하지 않는 경우 Amazon GameLift Servers 서비스가 PlayerSession 상태를 TIMEDOUT으로 변경하고 게임 세션의 플레이어 슬롯을 다시 엽니다.

플레이어 제거

플레이어 세션을 사용하는 게임의 경우 플레이어 연결이 끊어지면 게임 서버 프로세스가 Amazon GameLift Servers 서비스에 알립니다. 서비스는 이 정보를 사용하여 게임 세션의 플레이어 슬롯 상태를 추적하고 새 플레이어가 열린 슬롯을 사용하도록 허용할 수 있습니다.

  1. 플레이어가 게임 연결을 해제합니다.

  2. 게임 서버 프로세스가 끊어진 연결을 찾아내고 서버 SDK 작업 RemovePlayerSession()을 호출합니다.

  3. Amazon GameLift Servers 서비스가 플레이어 세션 상태를 COMPLETED으로 변경하고 게임 세션에서 플레이어 슬롯을 다시 엽니다.

게임 세션 종료

게임 세션이 종료되거나 게임 세션을 종료할 때 서버 프로세스가 Amazon GameLift Servers 서비스에 게임 세션 상태를 알립니다.

  1. 게임 서버 프로세스가 게임 세션을 종료하고 서버 SDK 작업 ProcessEnding()을 호출하여 프로세스 종료를 시작합니다.

  2. Amazon GameLift Servers 서비스가 다음을 수행합니다.

    1. 게임 세션 로그를 Amazon Simple Storage Service(S3)에 업로드합니다.

    2. 게임 세션 상태를 TERMINATED로 변경합니다.

    3. 서버 프로세스 상태를 TERMINATED로 변경합니다.

    4. 호스팅 솔루션의 설계 방식에 따라 새로 사용 가능한 호스팅 리소스가 새 게임 서버 프로세스를 실행하도록 할당됩니다.