서버 SDK를 사용하여 게임 서버에 Amazon GameLift Servers를 추가합니다. - Amazon GameLift Servers

서버 SDK를 사용하여 게임 서버에 Amazon GameLift Servers를 추가합니다.

이 주제에서는 게임 서버 코드에 추가해야 하는 서버 SDK 기능에 대한 일반적인 지침을 제공합니다. 이 기능을 사용하면 게임 서버 프로세스가 Amazon GameLift Servers 서비스와 통신할 수 있습니다. Amazon GameLift Servers 관리형 EC2 플릿, 관리형 컨테이너 플릿 또는 Anywhere 플릿에 배포하려는 게임 서버에 이 지침을 사용합니다.

게임 서버 프로세스는 Amazon GameLift Servers 서비스와 통신하여 서비스로부터 지침을 수신하고 서버 프로세스 상태 및 게임 세션 상태를 보고합니다. 게임 호스팅 솔루션 구성 요소(게임 서버, 백엔드 서비스, 게임 클라이언트, Amazon GameLift Servers) 간의 상호 작용에 대한 자세한 내용은 Amazon GameLift Servers와 게임 클라이언트/서버 상호 작용 섹션을 참조하세요.

서버 SDK 가져오기

호스팅을 위해 게임을 준비하려면 게임 서버 프로젝트에 Amazon GameLift Servers용 서버 SDK를 추가합니다. Server SDK는 여러 언어로 제공됩니다. 서버 SDK를 포함하여 게임 서버에 대한 도구 지원에 대한 자세한 내용은 Amazon GameLift Servers 개발 도구 가져오기 섹션을 참조하세요.

github.com/amazon-gamelift 개발 언어용 서버 SDK를 다운로드합니다. 서버 SDK 버전, 플러그인, 기타 개발 도구에 대한 리포지토리를 찾을 수 있습니다.

참고

Unreal Engine 또는 Unity를 사용하여 개발하는 경우 이러한 게임 엔진용 Amazon GameLift Servers 플러그인을 다운로드합니다. 서버 SDK가 내장되어 바로 사용할 수 있습니다. 추가 정보는 다음 링크를 참조하세요.

Server SDK API 참조:

서버 프로세스 초기화

Amazon GameLift Servers 서비스와의 통신을 설정하고 게임 서버 프로세스가 게임 세션을 호스팅할 준비가 되었음을 보고하는 코드를 추가합니다. 이 코드는 Amazon GameLift Servers 코드보다 먼저 실행되어야 합니다.

  1. InitSdk()를 호출하여 Amazon GameLift Servers API 클라이언트를 초기화합니다. Amazon GameLift Servers 관리형 EC2 플릿에서 실행되도록 게임 서버를 준비하는 경우 파라미터 없이 기본 InitSDK() (C++) (C#) (Unreal) (Go) 를 사용합니다. API 클라이언트는 Amazon GameLift Servers 서비스에 대한 연결을 처리합니다.

    Amazon GameLift Servers Anywhere 플릿에서 사용할 게임 서버를 준비하는 경우:

    다음 ServerParametersInitSdk()를 호출하여 Amazon GameLift Servers API 클라이언트를 초기화합니다.

    • 게임 서버에 연결하는 데 사용되는 WebSocket의 URL입니다.

    • 게임 서버를 호스팅하는 데 사용되는 프로세스의 ID입니다.

    • 게임 서버 프로세스를 호스팅하는 컴퓨팅의 ID입니다.

    • Amazon GameLift Servers Anywhere 컴퓨팅이 포함된 플릿의 ID입니다.

    • Amazon GameLift Servers 작업 GetComputeAuthToken을 통해 생성된 인증 토큰입니다.

  2. 서비스에 게임 서버 프로세스가 게임 세션을 호스팅할 준비가 되었음을 알립니다. 다음 정보 ProcessParameters와 함께 ProcessReady() (C++) (C#) (Unreal) (Go) 을 호출합니다. 각 게임 서버 프로세스는 ProcessReady()를 오직 한 번만 호출해야 합니다.

    • 서버 프로세스의 포트 번호입니다. 서버 프로세스가 게임 세션을 시작하면 Amazon GameLift Servers 서비스에 포트를 제공하여 게임 세션 정보를 업데이트합니다. 게임은 이 정보를 검색하고 게임 클라이언트에 제공할 수 있으며, 이 클라이언트는 이를 사용하여 서버 프로세스에 연결하고 게임 세션에 참여합니다.

    • Amazon GameLift Servers가 저장할 파일의 위치입니다. 여기에는 게임 세션 로그 및 서버 프로세스가 게임 세션 중에 생성하는 기타 파일이 포함될 수 있습니다. Amazon GameLift Servers가 이러한 파일들을 서버 프로세스가 실행 중인 컴퓨팅 장치에 일시적으로 저장하지만, 이 파일들은 인스턴스가 종료될 때까지만 사용할 수 있습니다. Amazon GameLift Servers 콘솔을 통하거나 Amazon GameLift Servers API 작업 GetGameSessionLogUrl()을 호출하여 저장된 파일에 액세스할 수 있습니다.

      Amazon GameLift Servers 관리형 컨테이너 플릿에서 사용할 게임 서버를 준비하는 경우:

      컨테이너 플릿에 대한 로그 파라미터를 지정할 필요가 없습니다. 대신 게임 세션 및 기타 로그 데이터를 표준 출력으로 전송합니다. 컨테이너 플릿은 모든 컨테이너 표준 출력을 로그 스트림으로 자동으로 캡처합니다.

    • Amazon GameLift Servers가 게임 서버 프로세스에 메시지 또는 프롬프트를 전송하도록 허용하는 다음 콜백 함수입니다. 게임 서버 코드에 이러한 각각의 함수를 구현해야 합니다. 자세한 내용은 ProcessParameters(C++) (C#) (Unreal) (Go) 을 참조하세요.

      • (선택 사항) onHealthCheck - Amazon GameLift Servers는 이 함수를 정기적으로 호출하여 서버에서 상태 보고서를 요청합니다.

      • onStartGameSession - Amazon GameLift Servers는 클라이언트 요청 CreateGameSession()에 대한 응답으로 이 함수를 호출합니다.

      • onProcessTerminate - Amazon GameLift Servers는 서버 프로세스를 강제로 중지하여 정상적으로 종료합니다.

      • (선택 사항) onUpdateGameSession - Amazon GameLift Servers가 업데이트된 게임 세션 객체를 게임 서버에 전달하거나 매치 채우기 요청에 대한 상태 업데이트를 제공합니다. FlexMatch 채우기 기능은 이 콜백이 필요합니다.

    소유하거나 제어하는 다른 AWS 리소스에 안전하게 액세스하도록 게임 서버를 설정할 수도 있습니다. 자세한 내용은 Amazon GameLift Servers 호스팅 게임 서버를 다른 AWS 리소스에 연결 섹션을 참조하세요.

(선택 사항) 서버 프로세스 상태 보고

게임 서버에 코드를 추가하여 onHealthCheck() 콜백 함수를 구현합니다. Amazon GameLift Servers는 이 콜백 메서드를 주기적으로 호출하여 상태 지표를 수집합니다. 이 콜백 함수를 구현하려면 다음을 수행합니다.

  • 서버 프로세스의 상태를 평가합니다. 예를 들어, 외부 종속성에 오류가 있는 경우 서버 프로세스의 상태를 비정상으로 보고할 수 있습니다.

  • 상태 평가를 완료하고 60초 내에 콜백에 응답합니다. Amazon GameLift Servers가 60초 내에 응답을 수신하지 못하면 자동으로 서버 프로세스를 비정상으로 간주합니다.

  • 정상에 대해 true, 비정상에 대해 false 부울 값을 반환합니다.

상태 확인 콜백을 구현하지 않으면 Amazon GameLift Servers는 서버가 응답하지 않는 한 서버 프로세스를 정상으로 간주합니다.

Amazon GameLift Servers 서비스는 서버 프로세스 상태를 사용하여 비정상 프로세스를 종료하고 리소스를 정리합니다. 서버 프로세스가 계속 비정상으로 보고되거나 세 번 연속 상태 확인에 응답이 없으면 이 서비스는 해당 프로세스를 종료하고 새 프로세스를 시작할 수 있습니다. 해당 서비스는 플릿의 서버 프로세스 상태에 대한 지표를 수집합니다.

(선택 사항) TLS 인증서 받기

TLS 인증서 생성이 활성화된 플릿에서 서버 프로세스가 실행 중인 경우 TLS 인증서를 검색하여 게임 클라이언트와 보안 연결을 설정하고 클라이언트 서버 통신을 암호화할 수 있습니다. 인증서 복사본이 인스턴스에 저장됩니다. 파일 위치를 확인하려면 GetComputeCertificate() (C++) (C#) (Unreal) (Go) 을 호출합니다.

게임 세션 시작

onStartGameSession 콜백 함수를 구현하는 코드를 추가합니다. Amazon GameLift Servers는 이 콜백을 호출하여 서버 프로세스에서 게임 세션을 시작합니다.

onStartGameSession 함수는 GameSession 객체를 입력 파라미터로 받아들입니다. 이 객체에는 최대 플레이어 수와 같은 주요 게임 세션 정보가 포함됩니다. 게임 데이터 및 플레이어 데이터도 포함될 수 있습니다. 함수 구현은 다음 작업을 수행해야 합니다.

  • GameSession 속성을 기반으로 새 게임 세션을 생성하는 작업을 시작합니다. 최소한 게임 서버는 게임 클라이언트가 서버 프로세스에 연결할 때 참조하는 게임 세션 ID에 연결해야 합니다.

  • 필요에 따라 게임 데이터와 플레이어 데이터를 처리합니다. 이 데이터는 GameSession 객체에 있습니다.

  • 새 게임 세션이 플레이어를 받아들일 준비가 되면 Amazon GameLift Servers 서비스에 알립니다. 서버 API 작업 ActivateGameSession() (C++) (C#) (Unreal) (Go) 을 호출합니다. 성공적인 호출에 대한 응답으로 해당 서비스가 게임 세션 상태를 ACTIVE으로 변경합니다.

(선택 사항) 새 플레이어 확인

플레이어 세션 상태를 추적하는 경우 새 플레이어가 게임 서버에 연결될 때 해당 플레이어를 확인하는 코드를 추가합니다. Amazon GameLift Servers는 현재 플레이어와 사용 가능한 게임 세션 슬롯을 추적합니다.

검증을 위해 게임 세션에 참여하려는 게임 클라이언트에는 플레이어 세션 ID가 포함되어야 합니다. Amazon GameLift Servers는 게임이 StartGameSessionPlacement() 또는 StartMatchmaking()을 호출하여 새 게임 세션을 시작할 때 이 ID를 생성합니다. 이러한 요청에서 게임 세션의 열린 슬롯은 플레이어 세션용으로 예약됩니다.

게임 서버 프로세스가 게임 클라이언트 연결 요청을 받으면 플레이어 세션 ID로 AcceptPlayerSession() (C++) (C#) (Unreal) (Go) 을 호출합니다. 이에 대한 응답으로 Amazon GameLift Servers는 플레이어 세션 ID가 게임 세션에 예약된 열린 슬롯과 일치하는지 확인합니다. Amazon GameLift Servers가 플레이어 세션 ID를 검증하면 서버 프로세스가 연결을 수락합니다. 그러면 플레이어가 게임 세션에 참여할 수 있습니다. Amazon GameLift Servers가 플레이어 세션 ID를 검증하지 않으면 서버 프로세스가 연결을 거부합니다.

(선택 사항) 플레이어 세션 종료 보고

플레이어 세션 상태를 추적하는 경우 플레이어가 게임 세션을 종료할 때 Amazon GameLift Servers에 알리는 코드를 추가합니다. 이 코드는 서버 프로세스가 연결 끊김을 감지할 때마다 실행되어야 합니다. Amazon GameLift Servers는 이 알림을 사용하여 게임 세션에서 현재 플레이어와 사용 가능한 슬롯을 추적합니다.

끊긴 연결을 코드에서 처리하려면 서버 API 작업 RemovePlayerSession() (C++) (C#) (Unreal) (Go) 에 대한 호출을 해당 플레이어 세션 ID와 함께 추가합니다.

게임 세션 종료

코드를 서버 프로세스 종료 시퀀스에 추가하여 게임 세션이 종료될 때 Amazon GameLift Servers에 알립니다. 호스팅 리소스를 재활용하고 새로 고치려면 게임 세션이 완료된 후 각 서버 프로세스를 종료합니다.

서버 프로세스 종료 코드를 시작할 때 서버 API 작업 ProcessEnding() (C++) (C#) (Unreal) (Go) g 을 호출합니다. 이 호출은 서버 프로세스가 종료되었음을 Amazon GameLift Servers에 알립니다. Amazon GameLift Servers는 게임 세션 상태와 서버 프로세스 상태를 TERMINATED으로 변경합니다. ProcessEnding()을 호출한 후에는 프로세스를 안전하게 종료할 수 있습니다.

서버 프로세스 종료 알림에 응답

Amazon GameLift Servers 서비스의 알림에 대한 응답으로 서버 프로세스를 종료하는 코드를 추가합니다. 서버 프로세스가 지속적으로 비정상을 보고하거나 서버 프로세스가 실행 중인 인스턴스가 종료되는 경우 서비스가 이 알림을 보냅니다. Amazon GameLift Servers는 용량 스케일 다운 이벤트의 일부로 또는 스팟 인스턴스 중단에 대한 응답으로 인스턴스를 중지할 수 있습니다. 스팟 인스턴스 중단은 2분짜리 알림을 제공하므로 서버 프로세스에서 플레이어를 정상적으로 연결 해제하고, 게임 상태 데이터를 보존하며, 기타 정리 작업을 수행할 수 있습니다.

종료 알림을 처리하려면 게임 서버 코드를 다음과 같이 변경합니다.

  • onProcessTerminate()(C++)(C#)(Unreal)(Go) 콜백 함수를 구현합니다. 이 함수는 서버 프로세스를 종료하는 코드를 호출해야 합니다.

  • 게임 서버 종료 코드에서 서버 API 작업 GetTerminationTime() (C++) (C#) (Unreal) (Go) 을 호출합니다. Amazon GameLift Servers가 서버 프로세스 중지 호출을 실행한 경우 GetTerminationTime()이 예상 종료 시간을 반환합니다.

  • 게임 서버 종료 코드를 시작할 때 서버 API 작업 ProcessEnding() (C++) (C#) (Unreal) (Go) 을 호출합니다. 이 호출은 서버 프로세스가 종료 중임을 Amazon GameLift Servers 서비스에 알립니다. 그러면 서비스가 서버 프로세스 상태를 TERMINATED로 변경합니다. ProcessEnding()을 호출한 후에는 프로세스를 안전하게 종료할 수 있습니다.