リージョン
Photon Cloudを利用すれば、世界中で低レイテンシーのゲームを実行するためのグローバルな接続が可能になります。 これは、様々なリージョンのサーバーをホスティングすることで実現されています。
利用可能なリージョンは、プロジェクトのライフタイムを通じて変更される可能性があるため、クライアントはPhoton ネームサーバーから最新のリージョンリストを取得します。
各リージョンは他のリージョンから完全に分離しており、リージョンはマスターサーバー(マッチメイキング用)とゲームサーバー(ルームのホスティング)から成ります。

利用可能なリージョンは製品ごとに異なります(Fusion、Quantum、Chat等)。 リージョン許可リストを使用すれば、クライアントがどのリージョンを利用可能かさらに定義することができます。
この製品のリージョンリストを以下に示します。
目次
利用可能なリージョン
Photon Cloudは、複数の地域にサーバーがあり、世界中の複数のホスティングセンターに分散しています。
Photon Cloudの各リージョンは、「リージョントークン」で認識されます。
リージョン | ホスティングされている場所 | トークン |
---|---|---|
アジア | シンガポール | asia |
オーストラリア | メルボルン | au |
中国本土1 (手順を参照してください) | 上海 | cn |
ヨーロッパ | アムステルダム | eu |
インド | チェンナイ | in |
香港 | 香港 | hk |
日本 | 東京 | jp |
南アフリカ | ヨハネスブルク | za |
南米 | サンパウロ | sa |
韓国 | ソウル | kr |
アメリカ(東) | ワシントンD.C. | us |
アメリカ(西) | サンノゼ | usw |
ダッシュボードでのリージョンのフィルタリング
アプリケーションごとに利用可能なPhoton Cloudのリージョンのリストを、ダッシュボードからすぐにフィルタリングできます。

ダッシュボードを開き、該当のアプリケーションの「管理」をクリックしてから、「編集」をクリックします。 許可されたリージョンのリストを入力できる、入力フィールドが以下のように表示されます:
- セミコロンで区切られたリージョントークン(例:「eu;us」)の文字列のみが、許可リストとして許可されます。
- リージョントークンは大文字・小文字が区別され、こちらで定義されます。
- 定義されていない、または認識されていないリージョントークンはリストから無視されます。
- 空 (「」) または不正な形式の文字列(例 「;;;」)は空のリストを意味します。
- 空のリストとは、利用可能なすべてのリージョンが許可されていることを意味します。
確認して保存すると、それ以降はネームサーバーはフィルタリングされたリージョンのリストのみを返します。 このため、クライアントはそのリストから選択する必要があります。 ダッシュボードの更新が反映されるには、最大で10分間かかる点を考慮してください。
リージョンの選択方法
アメリカにいるユーザーはPhoton Cloud USリージョンに接続すると、最低レイテンシーとなります。非常に明快です。
では、世界中 にユーザーがいる場合はどうでしょうか?
以下のいずれかを選択できます。
- a) ゲームクライアントに様々なPhoton Cloudリージョンへpingを送信させ、最適なpingをあらかじめ選択する。 手順を参照してください。
- b) リージョンにひもづくクライアントビルドを配信し、様々なリージョンのユーザーが他のPhoton Cloudリージョンに接続できるようにする。 または
- c) ゲームのUI内で、マッチングするリージョンをユーザーに選択させる。
もしくは、 d) ゲームプレイで高レイテンシーが許容可能な場合には、すべてのユーザーに同一リージョンに接続させる(例:それほどリアルタイムでないゲームの場合)。
Photon Cloudアプリケーションは、追加料金なしですべての利用可能なリージョンで稼動します。 価格設定を参照してください。
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()
が呼ばれます。結果的にloadBalancingClient.RegionHandler
が設定され、それがコードに実装されコールバックが登録されている場合にはOnRegionListReceived
を呼びます。
loadBalancingClient.OpGetRegions()
マスターサーバーのリストをもとにすべてのマスターサーバーにpingを送信でき、最低レイテンシーのゲームプレイを実現するうえでベストリージョンを把握できます。または、プレイヤーにリージョンを選択させることが可能です。これはRegionHandler.PingMinimumOfRegions()
によっておこなえます。
クライアントがリージョンを決定したら、そのリージョンのマスターサーバーに接続します(図「Photon Cloudリージョンへの接続」の2)。
loadBalancingClient.ConnectToRegionMaster("us")
最後に、ルームに参加するかまたはルームを作成します(図「Photon Cloudへのクライアント接続」の3)。
C++クライアントSDK
クラス
Client
のコンストラクターには、いくつかの任意のパラメータがあります。 このうちの最後、regionSelectionMode
のデフォルト値はRegionSelectionMode::DEFAULT
で、LoadBalancing::RegionSelectionMode
のいずれかの値をとります。 このパラメータには明示的にRegionSelectionMode::SELECT
を渡してください。Client::connect()
へのコールによってトリガーされた接続フローの際、クライアントはネームサーバーから利用可能なリージョンのリストを受信します。Listener
は任意でListener::onAvailableRegions()
コールバックを宣言します。regionSelectionMode
にRegionSelectionMode::SELECT
を渡した場合には、Client
は利用可能なリージョンのリストから項目を自動的には選択しませんが、そのコールバックにそのリストが渡されます。 このためListener
を実装する場合には、あらゆる基準にもとづいてリージョンを選択する意味のある実装で、そのコールバックのデフォルトの空の実装を上書きする必要があります。リージョンを選択するまで、接続フローは完全に一時停止します。
接続フローを続行するため、選択したリージョンを
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()
を呼ぶことはサポートされておらず、未確認の挙動が発生します。
Objective-C クライアント SDK
クラス
EGLoadBalancingClient
のコンストラクターには、いくつかの任意のパラメータがあります。 このうちの最後、regionSelectionMode
のデフォルト値はEGRegionSelectionMode_DEFAULT
で、EGRegionSelectionMode.h
のうちいずれかの値をとります。 このパラメータには明示的にEGRegionSelectionMode_SELECT
を渡してください。EGLoadBalancingClient::connect()
へのコールによってトリガーされた接続フローの際、クライアントはネームサーバーから利用可能なリージョンのリストを受信します。EGLoadBalancingListener
は任意のEGLoadBalancingListener::onAvailableRegions()
コールバックを宣言します。regionSelectionMode
にEGRegionSelectionMode_SELECT
を渡した場合には、EGLoadBalancingClient
は利用可能なリージョンのリストから自動的に項目を選択しませんが、そのコールバックにリストが渡されます。 このためEGLoadBalancingListener
を実装する場合には、あらゆる基準にもとづいてリージョンを選択する意味のある実装で、そのコールバックのデフォルトの空の実装を上書きする必要があります。リージョンを選択するまで、接続フローは完全に一時停止します。
接続フローを続行するため、選択したリージョンを
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ネームサーバーを使用する必要があります。 中国のPhotonネームサーバーは「ns.photonengine.cn」 です。
中国本土外からクライアントに接続しても、良い結果は得られません。 また、Photonサーバーから中国本土外のサーバーへの接続(たとえば、カスタム認証、Webhook、WebRPCなどで)は信頼性が高くありません。
また、法的な理由から中国向けには個別のビルドが必要となります。弊社は各ビルドに個別のAppIDを使用することを推奨しています。 たとえば、ビルドごとに(任意の)コンパイル条件を使用してAppIDやPhotonネームサーバーを変更します。
中国マーケット用に特別なビルドを作成するには、お使いのクライアントSDKの手順を参照してください。