기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon GameLift Local을 사용하여 통합 테스트
참고
이 주제에서는 Amazon GameLift 서버 SDK 버전 4.x 이하와 통합된 게임에 대한 테스트만 다룹니다. 서버 SDK 패키지에는 호환되는 버전의 Amazon GameLift Local이 포함되어 있습니다. 서버 SDK 버전 5.x를 사용하는 경우 Amazon을 사용한 로컬 테스트Amazon을 사용하여 로컬 테스트 설정 GameLift Anywhere는 섹션을 참조하세요. GameLift Anywhere 플릿.
Amazon GameLift Local을 사용하여 로컬 디바이스에서 제한된 버전의 관리형 Amazon GameLift 서비스를 실행하고 이에 대한 게임 통합을 테스트합니다. 이 도구는 게임 통합에서 반복적 개발을 수행할 때 유용합니다. Amazon에 각 새 빌드를 업로드 GameLift 하고 게임을 호스팅하도록 플릿을 구성하는 대안은 매번 몇 개 이상 걸릴 수 있습니다.
Amazon GameLift Local을 사용하면 다음을 확인할 수 있습니다.
-
게임 서버가 서버와 올바르게 통합SDK되었으며 Amazon GameLift 서비스와 제대로 통신하여 새 게임 세션을 시작하고, 새 플레이어를 수락하고, 상태와 상태를 보고합니다.
-
게임 클라이언트는 Amazon용 AWS SDK와 올바르게 통합되어 있으며 기존 게임 세션에 대한 정보를 검색 GameLift 하고, 새 게임 세션을 시작하고, 플레이어와 게임에 연결하고, 게임 세션에 연결할 수 있습니다.
Amazon GameLift Local은 관리형 Amazon GameLift 서비스의 독립형 버전을 시작하는 명령줄 도구입니다. 또한 Amazon GameLift Local은 서버 프로세스 초기화, 상태 확인, API 호출 및 응답에 대한 실행 중인 이벤트 로그를 제공합니다. Amazon GameLift Local은 Amazon 에 AWS SDK 대한 작업의 하위 집합을 인식합니다 GameLift. AWS CLI 또는 게임 클라이언트에서 전화를 걸 수 있습니다. 모든 API 작업은 Amazon GameLift 웹 서비스에서와 마찬가지로 로컬에서 수행됩니다.
각 서버 프로세스는 단일 게임 세션만 호스팅해야 합니다. 게임 세션은 Amazon GameLift Local에 연결하는 데 사용하는 실행 파일입니다. 게임 세션이 완료되면 GameLiftServerSDK::ProcessEnding
을 호출한 다음 프로세스를 종료해야 합니다. Amazon GameLift Local을 사용하여 로컬에서 테스트할 때 여러 서버 프로세스를 시작할 수 있습니다. 각 프로세스는 Amazon GameLift Local에 연결됩니다. 그런 다음 각 서버 프로세스마다 하나의 게임 세션을 생성할 수 있습니다. 게임 세션이 종료되면 게임 서버 프로세스가 종료되어야 합니다. 그런 다음 다른 서버 프로세스를 수동으로 시작해야 합니다.
Amazon GameLift 로컬은 다음 를 지원합니다APIs.
-
CreateGameSession
-
CreatePlayerSession
-
CreatePlayerSessions
-
DescribeGameSessions
-
DescribePlayerSessions
Amazon GameLift 로컬 설정
Amazon GameLift Local은 서버 SDK.jar
파일로 제공됩니다. Windows 또는 Linux에서 실행할 수 있으며 Amazon GameLift에서 지원하는 모든 언어와 함께 사용할 수 있습니다.
Local을 실행하기 전에 다음이 설치되어 있어야 합니다.
-
Amazon GameLift Server SDK 버전 3.1.5~4.x의 빌드입니다.
-
Java 8
게임 서버 테스트
게임 서버만 테스트하려면 AWS CLI 를 사용하여 Amazon GameLift Local 서비스에 대한 게임 클라이언트 호출을 시뮬레이션할 수 있습니다. 이는 게임 서버가 다음과 같은 점에서 예상대로 작동하고 있는지 확인합니다.
-
게임 서버가 제대로 시작되고 Amazon GameLift Server 가 초기화됩니다SDK.
-
시작 프로세스의 일환으로 게임 서버는 Amazon에 서버가 게임 세션을 호스팅할 준비가 GameLift 되었음을 알립니다.
-
게임 서버는 실행 중에 1분 GameLift 마다 Amazon에 상태 상태를 전송합니다.
-
게임 서버가 새 게임 세션 시작 요청에 응답합니다.
-
Amazon GameLift Local을 시작합니다.
명령 프롬프트 창을 열고
파일이 포함된 디렉터리로 이동하여 이 파일을 실행합니다. 기본적으로 Local은 포트 8080에서 게임 클라이언트의 요청을 수신 대기합니다. 다른 포트 번호를 지정하려면 다음 예제에 나온 것처럼GameLiftLocal.jar
-p
파라미터를 사용합니다:java -jar GameLiftLocal.jar -p 9080
Local이 시작되면 2개의 로컬 서버가 시작되었다는 로그가 표시됩니다. 이때 한 서버는 게임 서버를 수신 대기하고 다른 한 서버는 게임 클라이언트 또는 AWS CLI를 수신 대기하는 상태입니다. 로그는 게임 구성 요소와의 통신 등, 2개의 로컬 서버에서 실행되는 활동을 계속 보고합니다.
-
게임 서버를 시작합니다.
Amazon GameLift통합 게임 서버를 로컬에서 시작합니다. 게임 서버의 엔드포인트를 변경할 필요는 없습니다.
로컬 명령 프롬프트 창에서 로그 메시지는 게임 서버가 Amazon GameLift Local 서비스에 연결되었음을 나타냅니다. 즉, 게임 서버가 Amazon GameLift ServerSDK( 사용)를 성공적으로 초기화했습니다
InitSDK()
. 게임 서버는 표시된 로그 경로를 사용하여ProcessReady()
를 호출했고, 게임 세션을 호스팅할 준비가 되었습니다. 게임 서버가 실행되는 동안 Amazon은 게임 서버에서 각 상태 보고서를 GameLift 기록합니다. 다음 로그 메시지 예는 성공적으로 통합된 게임 서버를 보여 줍니다.16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK connected: /127.0.0.1:64247 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK pid is 17040, sdkVersion is 3.1.5 and sdkLanguage is CSharp 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - NOTE: Only SDK versions 3.1.5 and above are supported in GameLiftLocal! 16:50:53,451 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady received from: /127.0.0.1:64247 and ackRequest requested? true 16:50:53,543 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady data: logPathsToUpload: "C:\\game\\logs" logPathsToUpload: "C:\\game\\error" port: 1935 16:50:53,544 INFO || - [HostProcessManager] nioEventLoopGroup-3-1 - Registered new process true, true, 16:50:53,558 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onReportHealth received from /127.0.0.1:64247 with health status: healthy
예상 오류 및 경고 메시지는 다음과 같습니다.
-
오류: “pID가 있는 프로세스를 찾을 수 ProcessReady 없음:
<process ID>
! InitSDK()가 호출되었습니까? -
경고: “pID를 사용하는 프로세스에 대한 프로세스 상태가 이미 있습니다.
<process ID>
! ProcessReady(...)가 두 번 이상 호출되었습니까?
-
-
를 시작합니다 AWS CLI.
게임 서버가
ProcessReady()
를 성공적으로 호출하면 클라이언트 호출을 시작할 수 있습니다. 다른 명령 프롬프트 창을 열고 AWS CLI 도구를 시작합니다. AWS CLI 기본적으로 는 Amazon GameLift 웹 서비스 엔드포인트를 사용합니다. 다음 요청 예제에 나온 것처럼--endpoint-url
파라미터를 사용하여 모든 요청에서 Local 엔드포인트로 이를 재정의해야 합니다.AWS gamelift describe-game-sessions --endpoint-url http://localhost:9080 --fleet-id fleet-123
AWS CLI 명령 프롬프트 창에서
AWS gamelift
명령은 AWS CLI 명령 참조 에 설명된 대로 응답을 생성합니다. -
게임 세션을 생성합니다.
를 사용하여 CreateGameSession() 요청을 AWS CLI제출합니다. 요청은 필요한 구문에 따라야 합니다. Local의 경우,
FleetId
파라미터는 어떤 유효한 문자열(^fleet-\S+
)로도 설정이 가능합니다.AWS gamelift create-game-session --endpoint-url http://localhost:9080 --maximum-player-session-count 2 --fleet-id fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
로컬 명령 프롬프트 창에서 로그 메시지는 Amazon GameLift Local이 게임 서버에
onStartGameSession
콜백을 보냈음을 나타냅니다. 게임 세션이 성공적으로 생성된 경우, 게임 서버는ActivateGameSession
을 호출하여 응답합니다.13:57:36,129 INFO || - [SDKInvokerImpl] Thread-2 - Finished sending event to game server to start a game session: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6. Waiting for ack response.13:57:36,143 INFO || - [SDKInvokerImpl] Thread-2 - Received ack response: true13:57:36,144 INFO || - [CreateGameSessionDispatcher] Thread-2 - GameSession with id: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6 created13:57:36,227 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate received from: /127.0.0.1:60020 and ackRequest requested? true13:57:36,230 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate data: gameSessionId: "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890"
창에서 AWS CLI Amazon은 게임 세션 ID를 포함한 게임 세션 객체로 GameLift 응답합니다. 새 게임 세션 상태가 Activating임에 유의하십시오. 게임 서버가 를 호출하면 상태가 활성으로 변경됩니다 ActivateGameSession. 변경된 상태 를 보려면 를 사용하여 AWS CLI 를 호출합니다
DescribeGameSessions()
.{ "GameSession": { "Status": "ACTIVATING", "MaximumPlayerSessionCount": 2, "FleetId": "fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "GameSessionId": "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890", "IpAddress": "127.0.0.1", "Port": 1935 } }
게임 서버 및 클라이언트 테스트
플레이어와 게임 연결 등 전체 게임 통합을 확인하기 위해 게임 서버와 클라이언트를 모두 로컬에서 실행할 수 있습니다. 이렇게 하면 게임 클라이언트에서 Amazon GameLift Local로의 프로그래밍 방식 호출을 테스트할 수 있습니다. 다음과 같은 작업을 확인할 수 있습니다.
-
게임 클라이언트는 게임 세션 생성, 기존 게임 세션에 대한 정보 검색, 플레이어 세션 생성을 포함하여 Amazon GameLift Local 서비스에 성공적으로 AWS SDK 요청하고 있습니다.
-
플레이어가 게임 세션에 참가하려 할 때 게임 서버가 올바로 플레이어를 확인합니다. 확인된 플레이어의 경우, 게임 서버는 플레이어 데이터(구현된 경우)를 검색할 수 있습니다.
-
플레이어가 게임에서 나갈 때 게임 서버는 끊긴 연결을 보고합니다.
-
게임 서버가 게임 세션 종료를 보고합니다.
-
Amazon GameLift Local을 시작합니다.
명령 프롬프트 창을 열고
파일이 포함된 디렉터리로 이동하여 이 파일을 실행합니다. 기본적으로 Local은 포트 8080에서 게임 클라이언트의 요청을 수신 대기합니다. 다른 포트 번호를 지정하려면 다음 예제에 나온 것처럼GameLiftLocal.jar
-p
파라미터를 사용합니다../gamelift-local -p 9080
Local이 시작되면 2개의 로컬 서버가 시작되었다는 로그가 표시됩니다. 이때 한 서버는 게임 서버를 수신 대기하고 다른 한 서버는 게임 클라이언트 또는 AWS CLI를 수신 대기하는 상태입니다.
-
게임 서버를 시작합니다.
Amazon GameLift통합 게임 서버를 로컬에서 시작합니다. 메시지 로그에 대한 자세한 내용은 게임 서버 테스트 섹션을 참조하세요.
-
Local에 대해 게임 클라이언트를 구성하고 시작합니다.
Amazon GameLift Local 서비스와 함께 게임 클라이언트를 사용하려면 에 설명된 대로 게임 클라이언트 설정을 다음과 같이 변경해야 합니다 GameLift 백엔드 서비스에 Amazon 설정.
-
http://localhost:9080
등 Local 엔드포인트를 가리키도록ClientConfiguration
객체를 변경합니다. -
대상 플릿 ID 값을 설정합니다. Local의 경우, 실제 플릿 ID는 필요하지 않습니다. 대상 플릿을
fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
와 같은 유효한 문자열(^fleet-\S+
)로 설정하십시오. -
AWS 자격 증명을 설정합니다. Local의 경우, 실제 AWS 자격 증명이 필요 없습니다. 액세스 키와 비밀 키를 어떤 문자열로도 설정할 수 있습니다.
로컬 명령 프롬프트 창에서 게임 클라이언트를 시작하면 로그 메시지가 를 초기화했고 Amazon GameLift 서비스와
GameLiftClient
성공적으로 통신했음을 나타내야 합니다. -
-
Amazon GameLift 서비스에 대한 게임 클라이언트 호출을 테스트합니다.
게임 클라이언트가 다음 중 일부 또는 전부를 성공적으로 API 호출하는지 확인합니다.
Local 명령 프롬프트 창에서
CreateGameSession()
에 대한 호출만 로그 메시지를 발생시킵니다. 로그 메시지는 Amazon GameLift Local이 게임 서버에 게임 세션(onStartGameSession
콜백)을 시작하라는 메시지를 표시하고 게임 서버가 호출ActivateGameSession
하면 를 성공시킵니다. 창에서 AWS CLI 모든 API 호출은 문서화된 대로 응답 또는 오류 메시지를 생성합니다. -
게임 서버가 새 플레이어 연결을 검증하고 있는지 확인합니다.
게임 세션과 플레이어 세션을 생성한 후 게임 세션과의 직접적인 연결을 설정합니다.
Local 명령 프롬프트 창에서, 로그 메시지에는 게임 서버가 새 플레이어 연결을 검증하기 위해
AcceptPlayerSession()
요청을 전송했음이 표시되어야 합니다. 를 사용하여 AWS CLI 를 호출하는 경우DescribePlayerSessions()
플레이어 세션 상태가 예약됨에서 활성으로 변경됩니다. -
게임 서버가 Amazon GameLift 서비스에 게임 및 플레이어 상태를 보고하는지 확인합니다.
Amazon이 플레이어 수요 GameLift 를 관리하고 지표를 올바르게 보고하려면 게임 서버가 Amazon 에 다양한 상태를 다시 보고해야 합니다 GameLift. Local이 다음 작업과 관련된 이벤트를 로깅하고 있는지 확인합니다. AWS CLI 를 사용하여 상태 변경을 추적할 수도 있습니다.
-
플레이어가 게임 세션에서 연결 해제 - Amazon GameLift Local 로그 메시지에 게임 서버가 를 호출한다는 메시지가 표시되어야 합니다
RemovePlayerSession()
. AWS CLI 가DescribePlayerSessions()
를 호출하면Active
에서Completed
로 상태 변경이 이루어져야 합니다. 또한DescribeGameSessions()
를 호출하여 게임 세션의 현재 플레이어 수가 한 명 줄었는지 확인할 수 있습니다. -
게임 세션 종료 - Amazon GameLift 로컬 로그 메시지에 게임 서버가 를 호출한다는 메시지가 표시되어야 합니다
TerminateGameSession()
.참고
이전 지침은 게임 세션을 종료할 때
TerminateGameSession()
을 호출하는 것이었습니다. 이 방법은 Amazon GameLift Server SDK v4.0.1에서 더 이상 사용되지 않습니다. 게임 세션 종료을 참조하세요. -
서버 프로세스가 종료됨 - Amazon GameLift Local 로그 메시지는 게임 서버가 를 호출한다는 것을 보여야 합니다
ProcessEnding()
. 에 대한 AWS CLI 호출은 에서Terminated
(또는 )Active
로의 상태 변경을 반영DescribeGameSessions()
해야 합니다Terminating
.
-
Local을 사용한 변형
Amazon GameLift Local을 사용할 때는 다음 사항에 유의하세요.
-
Amazon GameLift 웹 서비스와 달리 Local은 서버의 상태 상태를 추적하고
onProcessTerminate
콜백을 시작하지 않습니다. Local은 단순히 게임 서버의 상태 보고서 로깅을 중지합니다. -
에 대한 호출의 경우 AWS SDK플릿IDs은 검증되지 않으며 파라미터 요구 사항()을 충족하는 문자열 값일 수 있습니다
^fleet-\S+
. -
Local로 IDs 생성된 게임 세션의 구조는 다릅니다. 여기서 보듯 여기에는 문자열
local
이 포함됩니다.arn:aws:gamelift:local::gamesession/fleet-123/gsess-56961f8e-db9c-4173-97e7-270b82f0daa6