Amazon GameLift를 게임 서버에 추가
사용자 지정 게임 서버가 Amazon GameLift와 통신해야 하는 이유는 각 게임 서버 프로세스가 Amazon GameLift에서 시작하는 이벤트에 응답할 수 있어야 하기 때문입니다. 또한 게임 서버는 Amazon GameLift에 서버 프로세스 상태 및 플레이어 연결에 대한 정보를 지속적으로 제공해야 합니다. 게임 서버, 백엔드 서비스, 게임 클라이언트, Amazon GameLift가 함께 작동하여 게임 호스팅을 관리하는 방법에 대한 자세한 내용은 Amazon GameLift와 게임 클라이언트/서버 상호 작용 섹션을 참조하세요.
Amazon GameLift와 통합하도록 게임 서버를 준비시키려면 게임 서버 프로젝트에 Amazon GameLift Server SDK를 추가하고 이 주제에서 설명한 기능을 빌드합니다. Server SDK는 여러 언어로 제공됩니다. Amazon GameLift Server SDK에 대한 자세한 내용은 Amazon GameLift 개발 도구 섹션을 참조하세요.
Server SDK API 참조:
서버 프로세스 초기화
Amazon GameLift와의 통신을 설정하고 서버 프로세스가 게임 세션을 호스팅할 준비가 되었음을 보고하는 코드를 추가합니다. 이 코드는 Amazon GameLift 코드보다 먼저 실행되어야 합니다.
-
InitSdk()
를 호출하여 Amazon GameLift API 클라이언트를 초기화합니다. Amazon GameLift 관리형 EC2 인스턴스에서 실행 중인 게임 서버 프로세스를 초기화하려면 파라미터 없이 기본InitSDK()
(C++) (C#) (Unreal) (Go) 을 사용합니다. Amazon GameLift에 자동으로 연결됩니다.Amazon GameLift Anywhere 컴퓨팅 리소스에서 실행 중인 게임 서버 프로세스를 초기화하려면,ServerParameters
로InitSdk()
을 호출합니다.-
게임 서버에 연결하는 데 사용되는 WebSocket의 URL입니다.
-
게임 서버를 호스팅하는 데 사용되는 프로세스의 ID입니다.
-
게임 서버 프로세스를 호스팅하는 컴퓨팅의 ID입니다.
-
Amazon GameLift Anywhere 컴퓨팅을 포함하는 GameLift 플릿의 ID입니다.
-
Amazon GameLift 작업(
GetComputeAuthToken
)을 통해 생성된 인증 토큰입니다.
-
-
Amazon GameLift에 서버 프로세스가 게임 세션을 호스팅할 준비가 되었음을 알립니다. 다음 정보와 함께
ProcessReady()
(C++) (C#) (Unreal) (Go) 을 호출합니다. (서버 프로세스당 한 번만ProcessReady()
를 호출해야 한다는 점에 유의하세요.)-
서버 프로세스에서 사용하는 포트 번호입니다. 백엔드 서비스는 서버 프로세스에 연결하고 게임 세션에 참여할 수 있도록 게임 클라이언트에 포트 번호와 IP 주소를 제공합니다.
-
Amazon GameLift에서 보관하려는 파일(예: 게임 세션 로그)의 위치입니다. 서버 프로세스는 게임 세션 중에 이러한 파일을 생성합니다. 파일은 서버 프로세스가 실행 중인 인스턴스에 임시로 저장되며 인스턴스가 종료되면 손실됩니다. 목록에 있는 모든 파일은 Amazon GameLift에 업로드됩니다. Amazon GameLift 콘솔
을 통하거나 Amazon GameLift API 작업 GetGameSessionLogUrl()을 호출하여 이러한 파일에 액세스할 수 있습니다. -
Amazon GameLift가 서버 프로세스에 호출할 수 있는 콜백 함수의 이름입니다. 게임 서버는 이러한 함수를 구현해야 합니다. 자세한 내용은 (C++) (C#) (Unreal) (Go) 을 참조하세요.
-
(선택 사항)
onHealthCheck
- Amazon GameLift는 이 함수를 정기적으로 호출하여 서버에서 상태 보고서를 요청합니다. -
onStartGameSession
- Amazon GameLift는 클라이언트 요청 CreateGameSession()에 대한 응답으로 이 함수를 호출합니다. -
onProcessTerminate
- Amazon GameLift는 서버 프로세스를 강제로 중지하여 정상적으로 종료합니다. -
(선택 사항)
onUpdateGameSession
- Amazon GameLift가 업데이트된 게임 세션 객체를 게임 서버에 전달하거나 매치 채우기 요청에 대한 상태 업데이트를 제공합니다. FlexMatch 채우기 기능은 이 콜백이 필요합니다.
-
소유하거나 제어하는 AWS 리소스에 안전하게 액세스하도록 게임 서버를 설정할 수도 있습니다. 자세한 내용은 플릿에서 다른 AWS 리소스와 통신 단원을 참조하십시오.
-
(선택 사항) 서버 프로세스 상태 보고
코드를 게임 서버에 추가하여 콜백 함수 onHealthCheck()
를 구현합니다. Amazon GameLift는 이 콜백 메서드를 주기적으로 호출하여 상태 지표를 수집합니다. 이 콜백 함수를 구현하려면 다음을 수행합니다.
-
서버 프로세스의 상태를 평가합니다. 예를 들어, 외부 종속성에 오류가 있는 경우 서버 프로세스의 상태를 비정상으로 보고할 수 있습니다.
-
상태 평가를 완료하고 60초 내에 콜백에 응답합니다. Amazon GameLift가 60초 내에 응답을 수신하지 못하면 자동으로 서버 프로세스를 비정상으로 간주합니다.
-
정상에 대해 true, 비정상에 대해 false 부울 값을 반환합니다.
상태 확인 콜백을 구현하지 않으면 Amazon GameLift는 서버가 응답하지 않는 한 서버 프로세스를 정상으로 간주합니다.
Amazon GameLift는 서버 프로세스 상태를 사용하여 비정상 프로세스를 종료하고 리소스를 정리합니다. 서버 프로세스가 계속 비정상으로 보고되거나 세 번 연속 상태 확인에 응답이 없으면 Amazon GameLift는 해당 프로세스를 종료하고 새 프로세스를 시작할 수 있습니다. Amazon GameLift는 플릿의 서버 프로세스 상태에 대한 지표를 수집합니다.
(선택 사항) TLS 인증서 받기
TLS 인증서 생성이 활성화된 플릿에서 서버 프로세스가 실행 중인 경우 TLS 인증서를 검색하여 게임 클라이언트와 보안 연결을 설정하고 클라이언트 서버 통신을 암호화할 수 있습니다. 인증서 복사본이 인스턴스에 저장됩니다. 파일 위치를 확인하려면 GetComputeCertificate()
(C++) (C#) (Unreal) (Go) 을 호출합니다.
게임 세션 시작
코드를 추가하여 콜백 함수 onStartGameSession
을 구현합니다. Amazon GameLift는 이 콜백을 호출하여 서버에서 게임 세션을 시작합니다.
onStartGameSession
함수는 GameSession 객체를 입력 파라미터로 받아들입니다. 이 객체에는 최대 플레이어 수와 같은 주요 게임 세션 정보가 포함됩니다. 게임 데이터 및 플레이어 데이터도 포함될 수 있습니다. 함수 구현은 다음 작업을 수행해야 합니다.
-
GameSession
속성을 기반으로 새 게임 세션을 생성하는 작업을 시작합니다. 최소한 게임 서버는 게임 클라이언트가 서버 프로세스에 연결할 때 참조하는 게임 세션 ID에 연결해야 합니다. -
필요에 따라 게임 데이터와 플레이어 데이터를 처리합니다. 이 데이터는
GameSession
객체에 있습니다. -
새 게임 세션이 플레이어를 받아들일 준비가 되면 Amazon GameLift에 알립니다. 서버 API 작업
ActivateGameSession()
(C++) (C#) (Unreal) (Go) 을 호출합니다. 성공적인 호출에 대한 응답으로 Amazon GameLift가 게임 세션 상태를ACTIVE
로 변경합니다.
(선택 사항) 새 플레이어 확인
플레이어 세션 상태를 추적하는 경우 새 플레이어가 게임 서버에 연결될 때 해당 플레이어를 확인하는 코드를 추가합니다. Amazon GameLift는 현재 플레이어와 사용 가능한 게임 세션 슬롯을 추적합니다.
검증을 위해 게임 세션에 대한 액세스를 요청하는 게임 클라이언트는 플레이어 세션 ID를 포함해야 합니다. Amazon GameLift는 플레이어가 StartGameSessionPlacement() 또는 StartMatchmaking()을 사용하여 게임에 참여하도록 요청하면 이 ID를 자동으로 생성합니다. 그러면 플레이어 세션이 게임 세션에서 열린 슬롯을 예약합니다.
게임 서버 프로세스가 게임 클라이언트 연결 요청을 받으면 플레이어 세션 ID로 AcceptPlayerSession()
(C++) (C#) (Unreal) (Go) 을 호출합니다. 이에 대한 응답으로 Amazon GameLift는 플레이어 세션 ID가 게임 세션에 예약된 열린 슬롯과 일치하는지 확인합니다. Amazon GameLift가 플레이어 세션 ID를 검증하면 서버 프로세스가 연결을 수락합니다. 그러면 플레이어가 게임 세션에 참여할 수 있습니다. Amazon GameLift가 플레이어 세션 ID를 검증하지 않으면 서버 프로세스가 연결을 거부합니다.
(선택 사항) 플레이어 세션 종료 보고
플레이어 세션 상태를 추적하는 경우 플레이어가 게임 세션을 종료할 때 Amazon GameLift에 알리는 코드를 추가합니다. 이 코드는 서버 프로세스가 끊어진 연결을 감지할 때마다 실행되어야 합니다. Amazon GameLift는 이 알림을 사용하여 게임 세션에서 현재 플레이어와 사용 가능한 슬롯을 추적합니다.
끊긴 연결을 코드에서 처리하려면 Server API 작업 RemovePlayerSession()
(C++) (C#) (Unreal) (Go) 에 대한 호출을 해당 플레이어 세션 ID와 함께 추가합니다.
게임 세션 종료
코드를 서버 프로세스 종료 시퀀스에 추가하여 게임 세션이 종료될 때 Amazon GameLift에 알립니다. 호스팅 리소스를 재활용하고 새로 고치려면 게임 세션이 완료된 후 Amazon GameLift가 서버 프로세스를 종료합니다.
서버 프로세스 종료 코드를 시작할 때 서버 API 작업 ProcessEnding()
(C++) (C#) (Unreal) (Go) g 을 호출합니다. 이 호출은 서버 프로세스가 종료 중임을 Amazon GameLift에 알립니다. Amazon GameLift는 게임 세션 상태 및 서버 프로세스 상태를 TERMINATED
로 변경합니다. ProcessEnding()
을 호출한 후에는 프로세스를 안전하게 종료할 수 있습니다.
서버 프로세스 종료 알림에 응답
Amazon GameLift의 알림에 대한 응답으로 서버 프로세스를 종료하는 코드를 추가합니다. Amazon GameLift는 서버 프로세스가 지속적으로 비정상이라고 보고하거나 서버 프로세스가 실행 중인 인스턴스가 종료되는 경우 이 알림을 보냅니다. Amazon GameLift는 스케일 다운 이벤트의 일부로 또는 스팟 인스턴스 중단에 대한 응답으로 인스턴스를 중지할 수 있습니다.
종료 알림을 처리하려면 게임 서버 코드를 다음과 같이 변경합니다.
-
콜백 함수
onProcessTerminate()
을 구현합니다. 이 함수는 게임 프로세스를 종료하는 코드를 호출해야 합니다. Amazon GameLift에서 이 작업을 호출하면 스팟 인스턴스 중단이 발생하여 2분 동안 알림을 보냅니다. 이 알림으로 서버 프로세스 시간을 제공하여 안전하게 플레이어 연결을 해제하고, 게임 상태 데이터를 보존하며, 기타 정리 작업을 수행할 수 있습니다. -
게임 서버 종료 코드에서 서버 API 작업
GetTerminationTime()
(C++) (C#) (Unreal) (Go) 을 호출합니다. Amazon GameLift가 서버 프로세스 중지 호출을 실행한 경우GetTerminationTime()
이 예상 종료 시간을 반환합니다. -
게임 서버 종료 코드를 시작할 때 서버 API 작업
ProcessEnding()
(C++) (C#) (Unreal) (Go) 을 호출합니다. 이 호출은 서버 프로세스가 종료되었음을 Amazon GameLift에 알리고 Amazon GameLift는 서버 프로세스 상태를TERMINATED
로 변경합니다.ProcessEnding()
을 호출한 후에는 프로세스를 안전하게 종료할 수 있습니다.