래퍼 샘플
래퍼 샘플(wrapGsdk라고도 함)은 기존 게임을 래핑하므로 Windows OS 및 Linux OS를 사용하는 게임 서버용 빌드 배포에 사용할 수 있습니다.
래퍼 애플리케이션을 사용하면 PlayFab 멀티 플레이어 서버에서 게임 서버 빌드를 사용할 수도 있습니다.
Important
래퍼는 표준 출력 및 오류 스트림을 처리하여 GSDK 메서드를 호출하는 방법으로 해결할 수 있으며 프로덕션용이 아닙니다.
샘플 콘텐츠
이 샘플은 두 개의 .NET Core 콘솔 애플리케이션으로 구성됩니다.
- Wrapper - PlayFab 게임 서버 SDK(GSDK)용 최신 NuGet 패키지를 게임 서버와 통합합니다. 이 래퍼 애플리케이션은 프로덕션용이 아닙니다.
- Fakegame - GSDK에 대한 지식이 없는 기본 게임 서버. PlayFab 멀티 플레이어 서버를 사용하기 전에 가지고 있는 일반적인 게임 서버와 같습니다. TCP 포트 80을 수신하는 ASP.NET Core Web Server Kestrel을 시작합니다. GSDK에 대한 지식이 전혀 없는 게임 서버를 시뮬레이트하기 위한 것입니다. 고유한 게임 서버가 없는 경우 이를 사용할 수 있습니다. 두 개의 GET 경로를 사용할 수 있습니다. /hello는 간단한 응답을 가져오는 데 /hello/terminate는 서버를 종료할 수 있습니다.
요구 사항
참고 항목
PlayFab 멀티 플레이어 서버를 사용하고 보려면 게임 관리자에서 기능을 사용하도록 설정해야 합니다. 자세한 내용은 PlayFab 서버 기능 사용을 참조하세요.
연습
이 샘플을 빌드하는 방법에 관한 라이브 단계별 안내는 Microsoft Game Dev 2021(약 2.52부터 시작)의 프레젠테이션을 확인하세요.
래퍼 실행 파일 획득 및 빌드
- 표준 Git 메서드를 사용하거나 zip 파일로 다운로드하여 GSDK 래퍼 샘플을 가져옵니다.
- 명령 프롬프트를 열고 cd 명령을 사용하여 디렉터리 경로를 wrapper.csproj 파일 위치로 변경합니다. 예: cd C:/ReplaceWithYourFilePath/wrappingGsdk/wrapper
- 그런 후 다음 .NET Core CLI 명령을 실행합니다.
dotnet publish --self-contained -r win-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true
래퍼 빌드가 성공하면 실행 파일이 ..\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish 폴더(아래 이미지와 같이)에 게시됩니다.
게임 서버 자산 만들기
게임 서버 자산을 만드는 방법에는 두 가지가 있습니다.
래퍼와 함께 Fakegame 게임 서버 사용
build.ps1을 사용하여 두 프로젝트(래퍼 및 fakegame)를 빌드하고 패키지합니다. 이 스크립트는 필요한 파일이 포함된 .zip 파일이 있는 드롭 폴더를 만듭니다.
- PowerShell 열기
- cd 명령을 사용하여 디렉터리 경로를 build.ps1 스크립트 위치로 변경합니다. 예: cd C:/ReplaceWithYourFilePath/wrappingGsdk/
- \build.ps1 실행
- 스크립트가 성공적으로 실행되면 \wrappingGsdk\drop\ 폴더로 이동합니다. 가짜 게임 서버 빌드, 래퍼 실행 파일(이전 단계에서 빌드됨) 및 기타 필수 파일이 포함된 gameassets.zip 파일이 생성됩니다.
래퍼와 함께 사용자 고유의 게임 서버 파일 사용
평가에서 게임 프로젝트를 사용하려면 래퍼와 게임 서버 실행 파일을 같은 폴더에 배치합니다.
- 래퍼 실행 파일 빌드에 있는 지침을 따릅니다.
- ..\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish에서 래퍼 게시 위치로 이동합니다.
- 다른 창에서 게임 서버 빌드 및 게임 서버 빌드를 실행하는 데 필요한 파일로 이동합니다. 어떤 파일이 필요한지 모르는 경우 필요한 DLL 파일 확인을 참조하세요.
- 게이머 서버 빌드 및 모든 필수 파일을 래퍼 게시 위치에 복사
- 래퍼 게시 위치에 있는 파일 모두 선택
- 모든 파일을 선택한 상태에서 마우스 오른쪽 단추를 클릭한 다음 보내기>zip으로 압축된 (zip) 파일을 선택합니다. 래퍼 게시 폴더를 선택하지 말고 zip에 추가하세요. 이로 인해 매핑이 잘못됩니다.
팁
교차 확인하려면 래퍼와 함께 Fakegame 게임 서버 사용의 지침에 따라 gameassets.zip을 빌드하고 참조로 사용합니다.
Linux 컨테이너 이미지 만들기 및 업로드(Linux 서버만 해당)
Linux 컨테이너 이미지를 만들려면 Dockerfile이 필요합니다. Dockerfile은 확장명이 없는 텍스트 파일이며 지정된 컨테이너 이미지를 빌드하는 데 필요한 모든 명령이 포함됩니다. 이 샘플에서는 이 파일이 이미 생성되어 있습니다. 컨테이너 이미지를 빌드하고 실행하기만 하면 됩니다.
Windows 개발 디바이스를 사용하려면 WSL(Linux용 Windows 하위 시스템)을 설치해야 합니다. 지침은 아래에 나와 있습니다. 자세한 내용은 Windows 및 Linux 컨테이너 이미지 차이를 참조하세요.
- Windows 개발 디바이스 설정(선택 사항)
- PlayFab 컨테이너 레지스트리 로그인 자격 증명 가져오기
- 기존 사용/자신만의 Dockerfile 만들기 이 단계는 FakeGame을 사용하는지 자체 게임 서버를 사용하는지에 따라 다릅니다.
- FakeGame을 사용하는 경우 Dockerfile이 있는지 확인합니다.
- 게임을 사용 중이거나 Dockerfile을 만들어야 하는 경우 Dockerfile 만들기를 참조하세요. FakeGame의 Dockerfile을 시작점으로 사용할 수 있습니다.
- Ubuntu와 같이 Docker가 설치된 Linux 터미널을 엽니다. TAG 및 ACR 변수의 값을 사용자 값으로 바꿉니다. 그런 다음, 아래 명령을 실행합니다.
TAG="0.1"
ACR="customer5555555.azurecr.io"
docker login ${ACR}
팁
ACR 및 TAG 변수가 올바르게 정의되었는지 확인하려면 echo $ACR 및 echo $TAG를 실행합니다.
- 이전 단계에서 받은 사용자 이름 및 암호를 입력합니다.
- Linux 컨테이너 이미지를 빌드하고 업로드합니다.
아래에 있는 명령을 실행하여 Dockerfile을 빌드하고 업로드합니다. docker build 명령의 끝에 "."가 있습니다. Dockerfile과 동일한 폴더/디렉터리에 있어야 합니다. 자세한 내용은 Linux 컨테이너 이미지 빌드 및 업로드를 참조하세요.
docker build -t ${ACR}/wrapper:${TAG} .
docker push ${ACR}/wrapper:${TAG}
게임 관리자 또는 API를 사용하여 빌드 배포
배포 빌드 프로세스는 Windows 및 Linux 게임 서버 모두에서 유사합니다.
Windows 게임 서버 배포
단계는 Windows Runner C# 샘플과 비슷합니다. 아래에 나열된 차이점을 사용하여 다음 단계를 수행합니다.
이 기능을 로컬에서 테스트하려면 로컬에서 게임 서버 디버깅 및 PlayFab과 통합을 확인하세요.
이 샘플과 관련된 설정
- 시작 명령:
- C:\Assets\wrapper.exe -g C:\Assets\fakegame.exe arg1 arg2 사용
- 게임 서버 빌드를 사용하는 경우 fakegame.exe를 게임 서버 실행 파일의 이름으로 바꾸기
- 네트워크 구성: 이름: gameport, 포트: 80, 프로토콜: TCP
- 자산: FakeGame을 사용하는 경우 gameassets.zip을 자산으로 업로드합니다.
Linux 게임 서버 배포
배포하려면 아래의 일반적인 단계를 수행합니다.
이 샘플과 관련된 설정
- 업로드한 컨테이너 선택
- 네트워크 구성: 이름: gameport, 포트: 80, 프로토콜: TCP
- 자산을 업로드하고 시작 명령을 설정할 필요가 없습니다.
참고 항목
RequestMultiplayerServer API를 사용할 때 할당하는 동안 연결하는 포트는 80과 다릅니다. 이는 PlayFab 멀티 플레이어 서버 서비스가 Azure Virtual Machines에서 실행되는 게임 서버에 대한 Azure Load Balancer(공용 인터넷에 포트를 노출) 간에 매핑을 만들기 때문입니다.
LocalMultiplayerAgent를 사용하여 래퍼 실행
사용자 지정 게임 서버에서 GSDK 통합을 테스트하려면 LocalMultiplayerAgent를 사용하는 것이 좋습니다.
Windows 컨테이너와 함께 LocalMultiplayerAgent를 사용하는 경우 MultiplayerSettings.json 파일을 올바르게 구성해야 합니다. 아래 예제를 찾아 LocalFilePath 및 StartGameCommand의 값에 특히 주의할 수 있습니다. fakegame.exe를 게임 서버 실행 파일의 이름으로 바꾸는 것을 잊지 마세요.
"AssetDetails": [
{
"MountPath": "C:\\Assets",
"SasTokens": null,
"LocalFilePath": "C:\\projects\\gsdkSamples\\wrappingGsdk\\drop\\gameassets.zip"
}
],
"StartGameCommand": "C:\\Assets\\wrapper.exe -g C:\\Assets\\fakegame.exe",
// if you are using fakegameserver you should also configure port mapping for port 80
"PortMappingsList": [
[
{
"NodePort": 56100,
"GamePort": {
"Name": "gameport",
"Number": 80,
"Protocol": "TCP"
}
}
]
]
이제 LocalMultiplayerAgent로 테스트할 준비가 되었습니다. 올바르게 구성한 경우 LocalMultiplayerAgent에서 게임 서버를 시작하는 즉시 http://localhost:56100/Hello에서 curl을 통해 여기에 연결할 수 있습니다.
MPS에서 게임 서버에 연결하는 방법
MPS에서 게임 서버와의 연결을 설정하려면 적절한 포트 번호를 확인해야 합니다. 이 요구 사항은 각각 여러 게임 서버 인스턴스를 실행할 수 있는 여러 가상 머신이 부하 분산 장치 뒤에서 관리되는 구성에서 발생합니다. 이러한 설정에서 단일 공용 IP 포트는 각각 고유한 게임 서버 인스턴스와 연결된 이러한 가상 머신의 다른 포트에 해당할 수 있습니다.
게임 관리자 사용
게임 관리자 UI를 사용하여 게임 서버를 할당하고 이에 대한 연결을 설정할 수 있습니다.
- 게임 관리자에 로그인
- 멀티 플레이어 => 서버 페이지로 이동하여 빌드 선택
- 서버 페이지로 이동하여 "서버 요청" 단추를 클릭합니다.
- 다음 페이지에서 공용 IPv4 주소와 포트를 기록해 둡니다.
- curl을 사용하여 http://[IPV4Address]:[Ports-Num>]/Hello에서 연결합니다."
MPS 할당자 샘플 사용
MPS 할당자 샘플을 사용하여 게임 서버를 할당하고 이에 대한 연결을 설정하는 방법은 다음과 같습니다.
- MPS 할당자 샘플을 컴파일하고 실행합니다.
- "ListBuildSummaries" 명령을 적용하여 사용 가능한 빌드 및 해당 빌드 ID를 확인합니다.
- "RequestMultiplayerServer"를 호출하여 게임 서버 instance 대한 요청을 시작합니다.
- 선택한 빌드 ID를 "ListMultiplayerServers" 명령에 입력하여 사용 가능한 서버 목록을 생성합니다.
- 활성 게임 서버 인스턴스를 선택한 다음 이전 단계에서 얻은 빌드 및 세션 ID와 함께 "GetMultiplayerServerDetails"를 사용합니다.
- 응답에 표시된 IPV4Address 및 Ports->Num을 기록해 둡니다.
- curl을 사용하여 http://[IPV4Address]:[Ports-Num>]/Hello에서 연결합니다.