リージョン

Photon Cloudを利用すれば、世界中で低レイテンシーのゲームを実行するためのグローバルな接続が可能になります。

クライアントはまずネームサーバーに接続し、ネームサーバーは利用可能なリージョンのリストを提供します。 通常は「ベストリージョン」の選択が有効化されており、最低pingのリージョンが検知されてクライアントはこのリージョンに接続します(下図を参照してください)。

各リージョンは他のリージョンから完全に分離しており、リージョンはマスターサーバー(マッチメイキング用)とゲームサーバー(ルームのホスティング)から成ります。

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

以下は、利用可能なリージョンの完全なリストです。 クライアントが利用できるリージョンはダッシュボードで定義できます。

ベストリージョンの検討

「ベストリージョン」オプションは、決定的なものではありません。 リージョンにあまり差がない場合や、まったく同じping計算がされた場合には、「ランダム」になる可能性があります。

理論上は以下の設定が可能です: - 同一デバイスから、複数リージョンに対してまったく同じpingを設定します。同じネットワークに接続したクライアント上で異なるリージョンに接続する場合には、ランダムになります。 - 同じネットワークに接続した異なるデバイス上(または同じデバイス上で異なる試行を実行する)で、同じリージョンに対して異なるping値を設定します。

たとえば、「us」と「usw」(または「ru」と「rue」)の場合、オンラインリージョンのホワイトリストを使用してリージョンを選択するか、または明示的にリージョンに接続します。

利用可能なリージョン

Photon Cloudは、複数のリージョンにサーバを設置しています。これらは世界各地のホスティングセンターに設置されています。

各Photon Cloudリージョンは「リージョントークン」で識別されます。

クライアントの「Connect」メソッドでリージョントークンを渡すには:

    loadBalancingClient.ConnectToRegionMaster(regionString);

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

リージョンホストされている場所トークン
アジアシンガポールasia
オーストラリアメルボルンau
カナダ(東)モントリオールcae
中国本土(手順を参照してください)上海cn
ヨーロッパアムステルダムeu
インドチェンナイin
日本東京jp
ロシアモスクワru
ロシア(東)ハバロフスクrue
南米サンパウロsa
韓国ソウルkr
アメリカ(東)ワシントンus
アメリカ(西)サンノゼusw

ダッシュボードでのリージョンのフィルタリング

アプリケーションごとに利用可能なPhoton Cloudのリージョンのリストを、ダッシュボードからすぐにフィルタリングできます。

Photon Cloud: Regions Whitelist
Photon Cloudリージョンのフィルタリング

ダッシュボードを開き、該当のアプリケーションの「管理」をクリックしてから、「編集」をクリックします。 ホワイトリストに登録されたリージョンのリストを入力できる、入力フィールドが以下のように表示されます。

  • セミコロンで区切られたリージョントークン(例:「eu;us」)の文字列のみが、リストとして許可されます。
  • リージョントークンは大文字・小文字が区別され、こちらで定義されます。
  • 定義されていない、または認識されていないリージョントークンはリストから無視されます。
  • 空 (「」) または不正な形式の文字列(例 「;;;」)は空のリストを意味します。
  • 空のリストとは、利用可能なすべてのリージョンが許可されていることを意味します。

確認して保存すると、それ以降はオペレーションGetRegionsはフィルタリングされたリージョンのリストのみを返します。 このため、クライアントはそのリストから選択する必要があります。ただし、クライアントは利用可能なリージョンに明示的に接続することも可能です。 ダッシュボードの更新が反映されるには、最大で10分間かかる点を考慮してください。

リージョンの選択方法

アメリカにいるユーザーはPhoton Cloud USリージョンに接続すると、最低レイテンシーとなります。非常に明快です。

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

以下のいずれかを選択できます。

  • a) ゲームクライアントに様々なPhoton Cloudリージョンへpingを送信させ、最適なpingをあらかじめ選択する。手順を参照してください。
  • b) リージョンにひもづくクライアントビルドを配信し、様々なリージョンのユーザーが他のPhoton Cloudリージョンに接続できるようにする。 または
  • c) ゲームのUI内で、マッチングするリージョンをユーザーに選択させる。

もしくは、 d) ゲームプレイで高レイテンシーが許容可能な場合には、すべてのユーザーに同一リージョンに接続させる(例:それほどリアルタイムでないゲームの場合)。

Photon Cloudアプリケーションは、追加料金なしですべての利用可能なリージョンで稼動します。 価格設定を参照してください。

Photon Cloudのダッシュボードでは、各リージョンでのゲームの利用状況のモニタリングでき、また購入プランのアップグレードまたはダウングレードを簡単に実行できます。 ダッシュボードに進む。

最低レイテンシーでゲームを起動する方法 

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

最寄りのマスターサーバーに接続

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

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

    loadBalancingClient.ConnectToRegionMaster("us");

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

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

実行時にリージョンを選択する方法

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

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

C#クライアントSDK

    loadBalancingClient.ConnectToNameServer()

正常に接続すると、利用可能なリージョンのリストが取得されます。

    loadBalancingClient.OpGetRegions()

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

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

    loadBalancingClient.ConnectToRegionMaster("us")

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

C++クライアントSDK

1. Photon Cloudへの接続を確認してください。Photon ServerはCloudのリージョンをサポートしません。

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

3. Client::connect()へのコールによってトリガーされた接続フローの際、クライアントはネームサーバーから利用可能なリージョンのリストを受信します。 Listenerは任意でListener::onAvailableRegions()コールバックを宣言します。 regionSelectionModeRegionSelectionMode::SELECTを渡した場合には、Clientは利用可能なリージョンのリストから項目を自動的には選択しませんが、そのコールバックにそのリストが渡されます。

このためListenerを実装する場合には、あらゆる基準にもとづいてリージョンを選択するよう、そのコールバックのデフォルトの空の実装を上書きする必要があります。

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

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

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

Listener::onAvailableRegions()の実装例は、クライアントSDK内のdemo_loadBalancingのソースコードを参照してください。

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()を呼ぶことはサポートされておらず、未確認の挙動が発生します。

オブジェククトCクライアントSDK

1. Photon Cloudへの接続を確認してください。Photon ServerはCloudのリージョンをサポートしません。

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

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

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

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

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

EGLoadBalancingListener::onAvailableRegions()の実装例は、クライアントSDK内のdemo_loadBalancing_objcのソースコードを参照してください:

- (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-cn.exitgames.com」 です。

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

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

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

中国マーケット用に特殊なビルドを作成するには、お使いのクライアントSDKの手順を参照してください。

C#クライアントSDK

  1. 中国リージョンが解除されたアプリケーションにAppIDを設定します。 同一プロジェクト内で、複数のビルドが有る場合には以下を参照してください:
        // TODO: replace compile condition with your own
    #if CHINA
        loadBalancingClient.AppID = "ChinaRealtimeAppId"; // TODO: replace with your own AppId
    #else
        loadBalancingClient.AppID = "nonChinaRealtimeAppId"; // TODO: replace with your own AppId
    #endif
  2. 「LoadBalancingClient.cs」ファイルを開き、「ns-cn.exitgames.com」にNameServerHostを設定してください:
  3. LoadBalancingClient.ConnectToRegionMaster("CN")を使用して、中国本土リージョンに接続してください。

C++クライアントSDK

Client::connect()へのパラメータserverAdressに「ns-cn.exitgames.com」を渡してください。 - パラメータserverTypeがデフォルト値のServerType::NAME_SERVERを保持するよう確認してください。

オブジェクトCクライアントSDK

  • EGLoadBalancingClient::connect()へのパラメータserverAdressに「ns-cn.exitgames.com」を渡してください。
  • パラメータserverTypeがデフォルト値のEGServerType_NAME_SERVERを保持するよう確認してください。

 ドキュメントのトップへ戻る