지역
Photon Cloud는 전 세계적으로 낮은 지연 시간의 게임을 가능하게 하는 글로벌 연결을 제공합니다.
이는 다양한 지역의 서버를 호스팅 하여 수행됩니다.
사용 가능한 영역은 프로젝트의 라이프 사이클에 따라 변경될 수 있으므로 클라이언트는 Photon Name Server에서 현재 영역 목록을 가져옵니다.
각 지역은 타 지역과 완벽하게 분리되어 있으며 마스터 서버(매치메이킹 용)와 게임 서버(호스팅 룸) 이루어져 있습니다.
사용 가능한 지역 목록은 제품(Fusion, Quantum, Chat 등)마다 다릅니다.
지역 화이트리스트를 사용하여 클라이언트에서 사용할 수 있는 지역을 추가로 정의할 수 있습니다.
아래는 이 제품의 지역 목록입니다.
사용할 수 있는 지역
Photon 클라우드에는 몇 개의 지역이 있으며 전 세계적으로 분산된 다수의 호스팅 센터가 있습니다.
각 Photon 클라우드 지역은 "지역 토큰"에 의해 구별됩니다.
클라이언트의 "Connect" 메소드에 지역 토큰을 전달하기 위해서 다음을 호출합니다:
C#
loadBalancingClient.ConnectToRegionMaster(regionString);
지역 | 호스트 위치 | 토큰 |
---|---|---|
아시아 | 싱가포르 | asia |
호주 | 멜버른 | au |
캐나다, 동부 | 몬트리올 | cae |
중국 본토1 (지침을 참고하세요) | 상하이 | cn |
유럽 | 암스테르담 | eu |
인도 | 첸아이 | in |
일본 | 도쿄 | jp |
남 아프리카2 | 요하네스버그 | za |
남 아메리카 | 상파울루 | sa |
한국 | 서울 | kr |
터키 | 이스탄불 | tr |
United Arab Emirates | Dubai | uae |
USA, 동부 | 워싱턴 D.C. | us |
USA, 서부 | 산호세 | usw |
USA, South Central | Dallas | ussc |
관리 화면 지역 필터링
관리 화면에서 바로 직접 애플리케이션 별로 사용할 수 있는 Photon Cloud 지역 목록을 필터링할 수 있습니다.
관리 화면으로 이동하여 선택한 애플리케이션의 "관리"를 클릭하고 "편집" 을 클릭합니다.
다음과 같이 바람직한 지역의 목록을 입력할 수 있는 입력 필드를 찾을 수 있을 것입니다:
- 허용된 목록은 세미콜론으로 분리된 지역 토큰 문자열이어야 합니다. 예를 들어, "eu;us".
- 지역 토큰은 대소문자를 구별하고 여기에 정의되어 있습니다.
- 정의되지 않았거나 식별할 수 없는 지역 토큰들은 목록에서 무시됩니다.
- 비어 있는 ("") 또는 잘못된 형식의 문자열 (예, ";;;") 은 빈 목록을 나타냅니다.
- 빈 목록은 모든 지역을 사용하도록 허용하는 것을 의미합니다.
확인하고 저장하면, GetRegions
오퍼레이션은 필터링 된 지역 목록만을 리턴할 것입니다.
따라서 클라이언트들은 그 목록에서 선택해야 하지만 명시적으로 사용할 수 있는 모든 지역에 연결하는 것이 가능합니다.
관리 화면에서 변경사항을 적용하기까지는 최대 10분까지 걸릴 수 있다는 것을 고려해 주시기 바랍니다.
최적의 지역 선택
미국내 사용자들은 Photon Cloud US지역에 연결된 경우 가장 낮은 레이턴시를 가집니다. 쉽습니다.
전 세계의사용자를 보유하고 계신다면 무엇을 해야 할까요?
할 수 있는 일
- a) 게임 클라이언트가 다양한 Photon Cloud 영역을 ping하고 ping이 가장 좋은 영역을 미리 선택하도록 합니다. ,방법을 읽어보세요.
- b) 지역에 연결된 클라이언트 빌드를 배포하여 다른 지역의 사용자가 다른 Photon Cloud 지역에 연결하거나
- c) 사용자가 게임 UI 내에서 일치하는 지역을 선택하도록 합니다.
또는 d) "실시간이 아닌" 게임에서 더 높은 레이턴시를 허용할 수 있는 경우 모든 사용자가 동일한 영역에 연결할 수 있도록 할 수 있습니다.
모든 Photon Cloud 앱은 추가 요금 없이 모든 사용 가능한 지역에서 작동합니다.
Photon Cloud의 관리 화면을 사용하면 각 지역의 게임 사용량을 모니터링하고 가입 계획을 쉽게 업그레이드하거나 다운그레이드할 수 있습니다.
관리 화면으로 이동합니다.
최적의 지역 선택
PUN과 Photon Voice는 최적의 지역을 선택하기 위해서 Realtime API 레이어에 의존적입니다.
C# Realtime API
Photon Realtime은 연결하기에 가장 적합한 지역을 감지할 수 있으며 해당 지역을 고수할 수 있도록 지원합니다.
이를 위해 클라이언트는 항상 연결할 때 네임 서버에서 사용 가능한 지역 목록을 가져옵니다.
서버 응답은 IConnectionCallbacks
에 정의되어 있는 것 처럼 OnRegionListReceived(RegionHandler regionHandler)
콜백으로 부터 제공되는 LoadBalancingClient.RegionHandler
를 설정하는데 사용됩니다.
일반적으로 다음 단계는 regionHandler.PingMinimumOfRegions()
를 호출하여 각 지역에 대한 현재 ping을 감지합니다. 완료 시 호출하는 메소드를 전달해야 하며, 최상의 경우 이전 실행의 "최적 영역 요약"도 전달할 수 있습니다(아래 설명).
서버를 ping 한 후 결과는 나중에 사용할 수 있도록 요약된 문자열에는 현재 가장 좋은 지역, 해당 ping 및 현재 지역 목록이 regionHandler.SummaryToCache
에 저장됩니다.
이전 세션의 SummaryToCache
결과가 없으면 모든 지역에 ping이 수행되므로 시간이 더 오래 걸립니다.
이전 결과를 사용할 수 있는 경우 클라이언트는 다음을 확인합니다.
a. 지역 목록이 변경된 경우("이전 최적 지역"이 여전히 사용 가능한 경우입니다)
b. ping이 더 이상 허용되지 않는 경우(>= 이전에 저장한 기준 값보다 1.5배 느림)입니다.
둘 중 하나가 적용되면 모든 지역으로 ping 되고 새 결과가 선택됩니다.
최적의 지역을 사용하면 관리 화면의 서버 측 영역 필터와 함께 사용할 수 있습니다.
플레이어가 온디맨드 방식으로 사용할 수 있는 지역 목록을 변경할 수 있습니다.
지역 목록에 접근하거나 이전 결과를 재정의하려면 지역에 대한 API 레퍼런스를 참조합니다.
최적 지역 고려 사항
"최적 지역" 옵션은 결정론적이지 않습니다.
때로는 약간의 변동성 또는 정확히 동일한 핑 계산으로 인해 "무작위" 일 수 있습니다.
이론적으로 가능한 것:
- 동일한 기기에서 여러 영역으로 동일한 핑 값을 가진 경우입니다. 따라서 동일한 네트워크에 연결된 클라이언트는 무작위로 다른 지역에 연결됩니다.
- 동일 네트워크에 연결된 서로 다른 기기에서 동일한 지역에 대하여 서로 다른 핑 값(또는 동일한 기기에서 다른 시도)
예를 들어, "us" 그리고 "usw"인 경우(또는 "ru" 그리고 "rue")에, 원하는 지역을 선택 또는 나머지 지역을 없앨 수 있도록 온라인 지역 화이트리스트를 사용할 수 있거나 지역을 지정하여 접속할 수 있습니다.
가장 낮은 레이턴시로 게임을 시작하는 방법
가장 가까운 마스터 서버에 접속하기
일반적인 지역 마스터 서버 주소를 사용하여 마스터 서버에 직접 접속하는 것은 더 이상 사용되지 않습니다. 대신에 사용하고 있는 SDK에서 제공되는 지역 마스터로 연결하는 메소드를 사용하게 됩니다!
클라이언트에서 가장 가까운 지역을 알고 있다면 지역만을 전달하여 접속할 수 있습니다.
C#
loadBalancingClient.ConnectToRegionMaster("us");
다른 플랫폼에 대해서는 SDK 목록에서 각각의 SDK와 API 링크를 따라가 보세요.
SDK는 네임 서버로부터 요청된 지역의 마스터 서버 주소를 얻게 됩니다. (그림 1번 "Photon Cloud 지역으로 접속하기") 그리고 선택한 지역 내의 마스터 서버로 자동으로 연결 (그림 2번 "Photon 클라우드 지역으로 접속하기") 합니다.
런타임시 지역을 선택하는 방법
런타임에 지역을 선택하고 싶은 경우에는 - 예를 들어, 플레이어에게 모든 지역 리스트를 보여주어 지역을 선택하는 것 - 먼저 네임 서버에 접속해야 합니다.
현재 사용할 수 있는 지역 마스터 서버 주소를 네임 서버로 질의할 수 있습니다. (그림 1번 "Photon Cloud 지역으로 접속하기")
우리가 쓰고 있는 "네임서버"는 사용할 수 있는 지역에 대해 지역적으로 로드 밸런싱 된 네임 서버입니다. 네임서버는 마스터 서버 주소 요청을 최대한 시간을 낮게 유지합니다.
C# 클라이언트 SDK
C#
loadBalancingClient.ConnectToNameServer()
연결이 성공하면 LoadBalancingClient.OpGetRegions()
가 내부적으로 호출됩니다. 이 결과는 loadBalancingClient.RegionHandler
를 설정하고 OnRegionListReceived
를 코드에서 구현하고 콜백으로 등록한 경우 이 메소드를 호출합니다.
마스터 서버 목록을 사용하면 모든 서버를 ping하여 지연 시간이 가장 낮은 게임플레이에 연결하기에 가장 좋은 지역을 찾거나 플레이어가 지역을 선택하도록 할 수 있습니다. 이 작업은 RegionHandler.PingMinimumOfRegions()
를 사용하여 수행할 수 있습니다.
클라이언트가 영역을 결정했으면 해당 영역의 마스터 서버에 연결합니다(그림 2"Connect to Photon Cloud 지역으로 연결").
C#
loadBalancingClient.OpGetRegions()
마지막으로, 게임에 참여하거나 게임을 위한 룸을 만드십시오(그림 3 "클라이언트가 Photon Cloud에 연결").
C++ 클라이언트 SDK
Client
클래스의 생성자에는 몇 가지 선택적인 파라미터가 있습니다.
그중 마지막은regionSelectionMode
이라고 부르며LoadBalancing::RegionSelectionMode
의 값 중 하나를 가지며 기본값은RegionSelectionMode::DEFAULT
입니다.
이 파라미터는 명시적으로RegionSelectionMode::SELECT
를 전달합니다.Client::connect()
를 호출하여 트리거되는 연결 흐름동안 클라이언트는 네임 서버에서 사용할 수 있는 지역 목록을 수신합니다.
Listener
는 선택적인Listener::onAvailableRegions()
콜백을 선언합니다.
regionSelectionMode
에서RegionSelectionMode::SELECT
를 전달한 경우,Client
는 사용할 수 있는 지역 목록에서 항목을 자동적으로 선택하지 않지만, 콜백에 목록을 전달합니다.
따라서Listener
구현 내에서 해당 콜백의 빈 기본 구현을 오버라이드 할 수 있는 모든 기준에 따라 지역을 선택하는 의미 있는 구현으로 재정의해야 합니다.지역을 선택하기 전까지 연결 흐름은 완전히 멈추게 됩니다.
연결 흐름을 계속하려면
Client::selectRegion()
으로 선택한 지역을 전달하십시오.
노트:
Client::selectRegion()
은 Listener::onAvailableRegions()
(이 콜백 내에서 직접적으로 selectRegion()
호출 또는 나중에 콜백이 리턴된 이후)에 대한 호출 수신 이후에만 호출될 것으로 예측됩니다.
그렇지 않으면 클라이언트는 지역 선택의 연결-흐름의 올바른 단계에 있지 않게 될 것입니다.
Listener::onAvailableRegions()
의 구현 예제는 클라이언트 SDK 내의 demo_loadBalancing 의 소스 코드에서 확인하실 수 있습니다:
C++
void NetworkLogic::onAvailableRegions(const ExitGames::Common::JVector<ExitGames::Common::JString>& availableRegions, const ExitGames::Common::JVector<ExitGames::Common::JString>& availableRegionServers)
{
EGLOG(ExitGames::Common::DebugLevel::INFO, L"%ls / %ls", availableRegions.toString().cstr(), availableRegionServers.toString().cstr());
mpOutputListener->writeLine(L"onAvailableRegions: " + availableRegions.toString() + L" / " + availableRegionServers.toString());
// select first region from list
mpOutputListener->writeLine(L"selecting region: " + availableRegions[0]);
mLoadBalancingClient.selectRegion(availableRegions[0]);
}
selectRegion()
은 onAvailableRegions()
호출이 수신된 이후에만 연결-흐름 동안에 호출되는 점을 참조하여 주세요.
onAvailableRegions()
을 다른 시점에서 또는 다른 상태 또는 반복적으로 호출하는 것은 지원되지 않으며 정의되지 않은 행동을 유발하게 됩니다.
Objective-C 클라이언트 SDK
EGLoadBalancingClient
생성자는 두 개의 선택적인 파라미터가 있습니다.
파라미터 중 마지막 것은regionSelectionMode
라고 하며,EGRegionSelectionMode.h
의 값을 받고 기본값은EGRegionSelectionMode_DEFAULT
입니다.
이 파라미터에 명시적으로EGRegionSelectionMode_SELECT
를 전달해주세요.
2.EGLoadBalancingClient::connect()
호출에 의하여 발생되는 연결 흐름 과정에서, 클라이언트는 네임 서버로부터 사용 가능한 지역들의 목록을 받습니다.
EGLoadBalancingListener
에서 선택적인 콜백인 EGLoadBalancingListener::onAvailableRegions()
를 선언합니다.
regionSelectionMode
에 대해서 EGRegionSelectionMode_SELECT
값을 전달하지 않은 경우에, EGLoadBalancingClient
는 사용할 수 있는 지역 목록에서 자동적으로 항목을 선택하지 않지만, 콜백으로 목록을 전달합니다.
따라서 EGLoadBalancingListener
구현에서는 기준에 따라 지역을 선택 할 수 있도록 콜백의 빈 기본 구현을 오버라이드 해 주어야 합니다.
연결 흐름은 지역을 선택하기 전까지 완전히 멈추게 됩니다.
연결 과정을 계속 하기 위해 선택한 지역을
EGLoadBalancingClient::selectRegion()
에 전달합니다.
참고:
EGLoadBalancingClient::selectRegion()
은 EGLoadBalancingListener::onAvailableRegions()
(이 콜백 내에서 직접적으로 selectRegion()
호출 또는 나중에 콜백이 리턴된 이후)에 대한 호출 수신 이후에만 호출될 것으로 예측됩니다.
그렇지 않으면 클라이언트는 지역 선택의 연결-흐름의 올바른 단계에 있지 않게 될 것입니다.
EGLoadBalancingListener::onAvailableRegions()
에 대한 구현 예제는 클라이언트 SDK 내의 demo_loadBalancing_objc 소스코드에서 보실 수 있습니다:
Objective-C
- (void) onAvailableRegions:(EGArray*)availableRegions :(EGArray*)availableRegionServers
{
NSString* r = [availableRegions componentsJoinedByString:@", "];
NSString* s = [availableRegionServers componentsJoinedByString:@", "];
EGLOG(EGDbgLvl::INFO, L"onAvailableRegions: %ls / %ls", [r UTF32String], [s UTF32String]);
[mOutputListener writeLine:@"onAvailableRegions: %@ / %@", r, s];
// select first region from list
[mOutputListener writeLine:@"selecting region: %@", availableRegions[0]];
[mLoadBalancingClient selectRegion:availableRegions[0]];
}
selectRegion()
은 onAvailableRegions()
호출이 수신된 이후에만 연결-흐름 동안에 호출되는 점을 참조하여 주세요.
onAvailableRegions()
을 다른 시점에서 또는 다른 상태 또는 반복적으로 호출하는 것은 지원되지 않으며 정의되지 않은 행동을 유발하게 됩니다.
중국 본토 지역에서 사용하기
방화벽이 트래픽을 차단할 수도 있으므로, Photon 네임서버는 중국에서만 국한되어야 합니다.
중국 Photon 네임서버는 "ns.photonengine.cn"입니다.
중국 본토 밖의 고객과 연결하는 것은 대부분 좋은 결과를 얻을 수 없을 것입니다.
또한 Photon 서버에서 중국 본토 이외의 서버 (예:사용자 정의 인증, WebHooks, WebRPC)로 연결하는 것은 신뢰할 수 없을 것입니다.
또한 법적인 이유로 중국을 위해 빌드를 분리하는 것이 필요하며, 별도의 AppId를 사용하는 것을 권장합니다.
예를 들어, 빌드 조건에 따라 AppId와 Photon 네임서버를 변경하려면 컴파일 조건(원하는 경우)을 사용하시기 바랍니다
중국 시장을 위한 특별한 빌드 구성에 대해서는 다음 지침을 따라 주세요:
C# 클라이언트 SDK
C#
void ConnectToChina()
{
AppSettings chinaSettings = new AppSettings();
chinaSettings.UseNameServer = true;
chinaSettings.ServerAddress = "ns.photonengine.cn";
chinaSettings.AppIdRealtime = "ChinaRealtimeAppId"; // TODO: replace with your own Realtime AppId unlocked for China region
chinaSettings.AppVersion = "ChinaAppVersion"; // optional
loadBalancingClient.ConnectUsingSettings(chinaSettings);
}
C# 클라이언트 SDK
serverAdress
파라미터로 "ns.photonengine.cn"Client::connect()
로 전달.ServerType::NAME_SERVER
의 기본값으로serverType
파라미터 유지 확인.
Objective-C 클라이언트 SDK
serverAdress
파라미터로 "ns.photonengine.cn"EGLoadBalancingClient::connect()
로 전달.EGServerType_NAME_SERVER
의 기본값으로serverType
파라미터 유지 확인.