This document is about: QUANTUM 2
SWITCH TO

リージョン

Photon Cloudは、世界中で低レイテンシのゲームを実行するための、グローバルな通信基盤を提供します。
これは、様々なリージョンでサーバーをホスティングすることで実現されています。

利用可能なリージョンは、プロジェクトの運用期間を通じて変わる可能性があります。クライアントは、Photonのネームサーバーから最新のリージョンのリストを取得できます。

各リージョンは、他のリージョンと完全に分離されています。リージョンは、マスターサーバー(マッチメイキング用)とゲームサーバー(ルームのホスト)で構成されます。

Photon Cloud Regions' Connect Flows
Photon Cloudリージョンへの接続

利用可能なリージョンのリストは、製品ごと(Fusion、Quantum、Chatなど)に異なります。
リージョン許可リストによって、AppIdごとにどのリージョンを利用可能にするかを定義することができます(後述)。

利用可能なリージョン

Photon Cloudは、いくつかのリージョンのサーバーで構成されており、世界中の複数のホスティングセンターに分散しています。
一部のリージョンのサーバーは、特定の製品やクライアントSDKにのみ対応しています。例えば、Fusionは日本リージョンを使用できますが、Chatは使用できません。

Photon Cloudの各リージョンは「リージョントークン」で識別され、大文字小文字を区別しない短い文字列です。例えば、「EU」と「eu」はどちらも有効で、同じヨーロッパリージョンを指します。


利用可能なリージョンとトークンのリスト:

リージョンホスティング場所トークン
アジアシンガポールasia
オーストラリアシドニーau
中国本土(こちらをご覧ください)上海cn
ヨーロッパアムステルダムeu
香港香港hk
インドチェンナイin
日本東京jp
南アフリカヨハネスブルクza
南米サンパウロsa
韓国ソウルkr
アラブ首長国連邦ドバイuae
アメリカ(東)ワシントンD.C.us
アメリカ(西)サンノゼusw

リージョン許可リスト

いくつかの理由から、プレイヤーやユーザーが利用可能なリージョンを制限したいことがあります(後述)。
リージョン許可リストによって、アプリケーションごとに、ダッシュボードから有効なリージョンを編集できます。クライアント側の変更は不要です。

ダッシュボードを開き、アプリケーションの「詳細へ」をクリックした後、リージョン許可リストの「編集」をクリックしてください。
すると、許可するリージョンのリストを入力できる入力欄が表示されます。

  • 有効なリージョンはSDKごとに定義されていて、Industries Circleでは異なることがあります
  • 許可リストは、セミコロンで区切られたリージョントークンの文字列(例:"eu;us")です
  • リージョントークンは、大文字と小文字を区別しません
  • 定義されていない/認識できないリージョントークンは、リストから無視されます
  • 空("")または不正な文字列(例:";;;")は、全ての利用可能なリージョンが許可されます

変更(入力後に保存)してから10分以内に、フィルタリングされたリストが、ネームサーバーに接続中のクライアントに送信されるようになります。
クライアント側とのコンフリクトを避けるため、Ping最小値の「ベストリージョン」に接続する、または受信したリージョンリストからリージョンを選択するようにしてください。

リージョンの選択方法

アメリカにいるユーザーは、Photon Cloud USリージョンに接続すれば、レイテンシは最小になります。それだけなら簡単です。


では、世界中にユーザーがいる場合はどうすれば良いでしょう?

その場合は、以下のいずれかを選択できます。

  • a) 様々なPhoton Cloudリージョンにpingを送信し、最適なリージョンをあらかじめクライアントに選択させる(こちらをご覧ください)
  • b) リージョンごとのビルドを配布して、異なる地域のユーザーを異なるPhoton Cloudリージョンに接続させる
  • c) ゲームのUI内で、リージョンをユーザーに選択させる
  • d) 高レイテンシが許容されるゲーム(それほどリアルタイムではないゲーム)なら、全てのユーザーを同一のリージョンに接続させる

Photon Cloudを使用するアプリケーションは、全ての利用可能なリージョンで動作し、追加料金はかかりません。価格プランをご覧ください。

Photon Cloudのダッシュボードでは、各リージョンでのゲームの利用状況をモニタリングでき、簡単にプランをアップグレード/ダウングレードすることができます。

C# Realtime API

Photon Realtime(ほとんどのPhotonのSDKで使用されています)は、接続すべきベストリージョンを検知でき、プレイヤーがそのリージョンへの接続を保持できるようにします。

これを実現するため、クライアントは接続時に接続可能なリージョンのリストをネームサーバーから常に取得します。

サーバーからの応答はLoadBalancingClient.RegionHandlerの設定に使用されます。LoadBalancingClient.RegionHandlerは、IConnectionCallbacksで定義されるとおり、OnRegionListReceived(RegionHandler regionHandler)`もコールバックによって提供されます。

通常、次のステップはregionHandler.PingMinimumOfRegions()を呼び、各リージョンへの最新のpingを検出することです。完了時には、呼び出すメソッドを渡す必要があり、最良のケースでは、以前の実行から「ベストリージョン・サマリー」を渡すこともできます(以下で説明します)。

サーバーへのping送信後、結果は後で使用できるようregionHandler.SummaryToCacheに要約され、デバイス上に保存されます。

以前のセッションのSummaryToCacheがなければ、すべてのリージョンがpingされますが、所要時間が長くなります。
以前の結果が利用可能な場合、クライアントは以下を確認します:

a. リージョンリストが変更された場合(「以前のベストリージョン」がまだ利用可能な場合に対応)

b. pingが受け入れられなくなった場合(以前に保存された参照値よりも1.5倍以上遅い)

どちらかが該当する場合、すべてのリージョンがpingされ、新しい結果が選択されます。

ベストリージョンを使用すると、ダッシュボード内のサーバー側のリージョンフィルタと連携します。この機能によって、プレイヤーが利用可能なリージョンがオンデマンドで更新されます。

リージョンのリストにアクセスする場合、または前回の結果を上書きする場合には、リージョンのAPIリファレンスを参照してください。

特定のマスターサーバーへの接続

包括的なリージョンのマスターサーバーアドレスを使用したマスターサーバーへの直接接続は、推奨されていません。 その代わりに、使用中のSDKによって提供されるリージョンマスターに接続するメソッドを使用してください!

クライアントから最寄りのリージョンが分かっている場合には、リージョンコードを渡すだけでそのリージョンに接続可能です。

C#

    loadBalancingClient.ConnectToRegionMaster("us")

その他のプラットフォームについては SDKのリストで、各SDKおよびAPIからリンクを開いてください

SDKは、ネームサーバーからリクエストされたサーバーへのマスターサーバーアドレスを取得します(図「Photon Cloudリージョンへの接続」の1)。その後、選択したリージョンのマスターサーバーに自動的に接続します(図「Photon Cloudリージョンへの接続」の2)。

リージョンリストを表示する方法

実行時にリージョンを選択する場合(例:利用可能なリージョンのリストをプレイヤーに表示し、プレイヤーにリージョンを選択させる場合)、まずネームサーバーに接続する必要があります。
ネームサーバーにクエリを実行し、現在利用可能なリージョンのマスターサーバーアドレスのリストを取得できます(図「Photon Cloudリージョンへの接続」の1)。

ネームサーバー」についてですが、ネームサーバーには利用可能なリージョン間で地理的にロードバランスが実行されます。 これによって、マスターサーバーのアドレスのリクエストにかかる時間が最低限に抑えられます。

C#クライアントSDK

C#

    loadBalancingClient.ConnectToNameServer()

正常に接続すると、内部的にLoadBalancingClient.OpGetRegions() が呼ばれます。結果的にloadBalancingClient.RegionHandlerが設定され、それがコードに実装されコールバックが登録されている場合にはOnRegionListReceivedを呼びます。

C#

    loadBalancingClient.OpGetRegions()

マスターサーバーのリストをもとにすべてのマスターサーバーにpingを送信でき、最低レイテンシーのゲームプレイを実現するうえでベストリージョンを把握できます。または、プレイヤーにリージョンを選択させることが可能です。これはRegionHandler.PingMinimumOfRegions()によっておこなえます。

クライアントがリージョンを決定したら、そのリージョンのマスターサーバーに接続します(図「Photon Cloudリージョンへの接続」の2)。

C#

    loadBalancingClient.ConnectToRegionMaster("us")

最後に、ルームに参加するかまたはルームを作成します(図「Photon Cloudへのクライアント接続」の3)。

C++クライアントSDK

  1. クラスClientのコンストラクターには、いくつかの任意のパラメータがあります。
    このうちの最後、 regionSelectionModeのデフォルト値はRegionSelectionMode::DEFAULTで、LoadBalancing::RegionSelectionModeのいずれかの値をとります。
    このパラメータには明示的にRegionSelectionMode::SELECTを渡してください。

  2. Client::connect()へのコールによってトリガーされた接続フローの際、クライアントはネームサーバーから利用可能なリージョンのリストを受信します。
    Listener は任意でListener::onAvailableRegions()コールバックを宣言します。
    regionSelectionModeRegionSelectionMode::SELECTを渡した場合には、Clientは利用可能なリージョンのリストから項目を自動的には選択しませんが、そのコールバックにそのリストが渡されます。
    このためListenerを実装する場合には、あらゆる基準にもとづいてリージョンを選択する意味のある実装で、そのコールバックのデフォルトの空の実装を上書きする必要があります。

  3. リージョンを選択するまで、接続フローは完全に一時停止します。

  4. 接続フローを続行するため、選択したリージョンをClient::selectRegion()に渡します。

注:
Client::selectRegion()Listener::onAvailableRegions()へのコールを受信した場合にのみ呼び出されることが想定されています(このコールバック内で直接、またはコールバックが返された後に selectRegion()を呼んでください)。
Listener::onAvailableRegions() へのコールを受信していない場合には、クライアントはリージョン選択の接続フローで正常な段階に達することができません。

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()へのコールを受信後にのみ、接続フロー内で呼ばれる点に留意してください。
任意のタイミングでselectRegion()を呼んだり、onAvailableRegions()への単一のコールに対して複数回selectRegion()を呼ぶことはサポートされておらず、未確認の挙動が発生します。

Objective-C クライアント SDK

  1. クラス EGLoadBalancingClient のコンストラクターには、いくつかの任意のパラメータがあります。
    このうちの最後、regionSelectionModeのデフォルト値はEGRegionSelectionMode_DEFAULTで、 EGRegionSelectionMode.hのうちいずれかの値をとります。
    このパラメータには明示的にEGRegionSelectionMode_SELECTを渡してください。

  2. EGLoadBalancingClient::connect()へのコールによってトリガーされた接続フローの際、クライアントはネームサーバーから利用可能なリージョンのリストを受信します。
    EGLoadBalancingListenerは任意のEGLoadBalancingListener::onAvailableRegions()コールバックを宣言します。
    regionSelectionModeEGRegionSelectionMode_SELECTを渡した場合には、EGLoadBalancingClientは利用可能なリージョンのリストから自動的に項目を選択しませんが、そのコールバックにリストが渡されます。
    このためEGLoadBalancingListenerを実装する場合には、あらゆる基準にもとづいてリージョンを選択する意味のある実装で、そのコールバックのデフォルトの空の実装を上書きする必要があります。

  3. リージョンを選択するまで、接続フローは完全に一時停止します。

  4. 接続フローを続行するため、選択したリージョンをEGLoadBalancingClient::selectRegion() に渡します。

注:
EGLoadBalancingClient::selectRegion()は、EGLoadBalancingListener::onAvailableRegions()へのコールを受信した場合にのみ呼び出されることが想定されています(このコールバック内で直接、またはコールバックが返された後にselectRegion()を呼んでください)。
EGLoadBalancingListener::onAvailableRegions()へのコールを受信していない場合には、クライアントはリージョン選択のための接続フローで正常な段階に達することができません。

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()へのコールを受信後にのみ、接続フロー内で呼ばれる点に留意してください。
任意のタイミングやステートでselectRegion()を呼んだり、onAvailableRegions() への単一のコールに対して複数回selectRegion()を呼ぶことはサポートされておらず、未確認の挙動が発生します。

中国本土のリージョンを使用

まず、Photonアプリケーション用に、中国本土リージョンへのアクセスをリクエストする必要があります。弊社宛にメールでご連絡ください。お客様のAppID用に解除します。
弊社のウェブサイトから、中国本土リージョンで使用される有償プランに申し込むことはできません。 有償プランの見積りについては、メールでご連絡ください。

ファイアウォールによってトラフィックがブロックされる可能性があるため、中国ローカルのPhotonネームサーバーを使用する必要があります。
中国のPhotonネームサーバーは「ns.photonengine.cn」です。

中国本土外からクライアントに接続しても、良い結果は得られません。
また、Photonサーバーから中国本土外のサーバーへの接続(例:カスタム認証、WebHook、WebRPCなど)の信頼性は高くありません。

重要:現段階では、ダッシュボードでアプリケーションに変更を加えても、中国のアプリケーションのキャッシュに自動的に反映されません。 アップデートをご希望の場合には、弊社宛にメールでご連絡ください。

また、法的な理由から、中国向けには個別のビルドが必要となり、個別のAppIdの使用を推奨します。
例えば、ビルドごとにAppIdやPhotonネームサーバーを変更するために、(任意の)条件コンパイルを使用してください。

中国マーケット用に特別なビルドを作成するには、お使いのクライアントSDKのマニュアルをご覧ください。

Back to top