Photon Server v5の新機能(ベータ)
主な変更点
NameServer
NameServerは、以前からPhoton Cloudにありました。v5では、それをセルフホストのPhoton Serverにも導入することにしました。
ロードバランシング・インスタンスのデフォルト・アプリケーションとしてNameServerを使用し、クライアントはMasterServerに切り替える前にまずNameServerに接続しなければならないというのが、現在のPhoton導入の望ましい方法です。
NameServerは、異なるデプロイされたリージョンやクラスターを構成するのに便利です。
そのため、ロードバランシングは別のレベルで行われます。
これは、エンタープライズのお客様に使用され、高く評価されています。
組み込み型の認証プロバイダ
v5のNameServer上のカスタム認証では、これまでPhoton Cloudのみで利用可能だった4つのプロバイダがすぐに利用できるようになりました。Facebook、Steam、Oculus、Viveです。
また、この機能はエンタープライズのお客様にもご利用いただいております。
PhotonSocketServer
構成の見直し
設定システムを全面的に変更され、読み込み、パース、バインディングは
.NET Core の設定プロバイダに依存するようになりました。
サーバーアプリケーションは、新しいコンストラクタを介してアプリケーションに注入されるインターフェイス Microsoft.Extensions.Configuration.ICONfiguration
を使用するために、Microsoft.Extensions.Configuration.Abstractions NuGet パッケージを必要とするようになりました。
PhotonServer.configファイルは、サーバー起動時にXMLスキーマの検証を行うようになりました。
新しい制限
ネイティブな設定(PhotonServer.configを介して設定された)により、データ転送の制限(メッセージサイズ、バッファサイズ、データ転送速度)を設定することは前からできました。
そこで、Photonサーバーに保護機能を追加するために、使用制限を定義するために微調整できる新しい設定を導入しました。
MessageRateLimit
: ピア毎に1秒間に受信できるメッセージの最大数を設定します。
デフォルトは5000です。MessageDataRateLimit
: ピア毎に1秒間にバッファリングされる受信データの最大サイズを指定します。
デフォルトは2147483647(int.MaxValue
)です。MaxMessageSizeLimit
: 着信メッセージに許容される最大サイズです。
デフォルトは512000です。
これらの設定方法については、マネージドSocketServerの設定を参照してください。
シリアル化プロトコル v1.8
最新のクライアントSDKでは、デフォルトでシリアル化プロトコルv1.8がサポートされています。
この新しいプロトコルにより、一般的に使用されるタイプのデータ転送技術が最適化され、コンパクトになりました。
安全な証明書の設定
セキュアリスナー用の証明書のフォーマットと設定を、セキュアチャネル(Schannel)からOpenSSLに変更しました。
新しい証明書の設定方法はこちらをご覧ください。
Photon Server v5では、TLS 1.2とTLS 1.3もサポートしています。
切断のスケジューリング
V5では切断をスケジューリングしたり遅らせ、クライアントのConnectionStateをScheduledForDisconnectに設定し、サーバを切断前にDisconnectMessageをクライアントに送信する方法を追加しました。デフォルトの遅延時間は5000ミリ秒です。
また、サーバーが切断する要因が増え、切断原因がエラーになることもあります。
ピアの切断が予定されている場合、サーバーはそのピアから受信したデータをすべて破棄します。
32ビットの対応終了
PhotonSocketServerは、64bit版のみの提供となりました。
"deploy\_Win32"がなくなりました。
ロードバランシング
設定の見直し
設定ファイルが変更され、各アプリケーションがそれぞれのファイルを持つようになり、構造もシンプルになりました。
プラグインの設定も別の設定ファイルに移動しました。
また、HttpQueueSettingsには独立したセクションが設けられ、HttpQueueを使用するセクション内で設定できるようになりました。
新しい制限
ロードバランシング・サーバ・アプリケーションのために、いくつかの雑多な設定可能な制限を設けていました。
しかし、これでは悪意のあるクライアントやハッカーからの攻撃や悪用からPhotonサーバを守るのに十分ではありませんでした。
操作の制限
一般的な制限:
操作コードごとに操作リクエストとパラメータの制限を追加しました。
具体的には:
一般的によく使われる操作、Join、Create、SetPropertiesにも制限があります。
GameServer:
OpLimitJoinGameRate
: ピア毎に1秒間に行われるJoinリクエストの最大数です。OpLimitCreateGameRate
: ピア毎に1秒間に行われるCreateリクエストの最大数。OpLimitSetPropertiesRate
: ピア毎に1秒間に行われるSetPropertiesリクエストの最大数。
MasterServer:
MaxConcurrentJoinRequests
:ピアあたりの保留中(キューに入れられた未処理のリクエスト)のJoin操作の最大数。MaxTotalJoinRequests
: ピアごとのJoin操作の最大合計数。MaxJoinedGames
:同じピアが同時に参加するルーム数の最大値。
HTTPの制限
通常のHTTPキューの設定とは別に、LimitHttpResponseMaxSize
を使って、受信するHTTPレスポンスのペイロードサイズを制限することができます。
これは、カスタム認証、WebRPC、カスタムプラグイン(Webhooksを含む)に適用できます。
イベントキャッシュの上限
EventCacheSlicesCountLimit
: ルームごとのイベントキャッシュスライスの最大数。EventCacheEventsCountLimit
: ルームごとのキャッシュされたイベントの最大数 (すべてのアクターとグローバルキャッシュ用)。ActorEventCacheEventsCountLimit
: ルームごとにアクターごとにキャッシュされるイベントの最大数。
プロパティの上限
GameServer:
MaxUniqPropertyKeysPerPeer
: ルームごとのアクターごとに異なるプロパティキーの最大数。MaxPropertiesPerRequest
: SetPropertiesリクエストごとの異なるプロパティの最大数。MaxPropertiesSizePerGame
: ルームごとのすべてのプロパティの最大合計サイズ。MaxPropertySizePerRequest
: 1回のSetPropertiesリクエストに含まれる1つのプロパティの最大サイズ。
ロビーの制限
MaxGamesOnJoin
:クライアントがロビーに参加した際に GameList イベントで送信されるルームリストエントリーの最大数。MaxGamesInUpdates
:GameListUpdate イベントで送信されるルームリストエントリーの最大数。MaxGamesInGetGamesListResponse
:GetGameList リクエストの結果としての SQL ルームリストエントリーの最大数。Total
: アプリケーションごとのロビーの最大数。
.NETターゲット
.NET Coreを完全にサポートするv6に備えて、サーバーソースコードの.NETプロジェクトのスタイルがv5で変更されたため、これに備えてビルドファイルが追加されました。
ビルドターゲットの設定(ビルド出力フォルダのターゲットなど)は、MSBuildファイル(csproj, csproj.includes)とカスタム定義やマクロで処理されます。
"build\include"フォルダを参照してください。
ビルドフローとデプロイプロセスは、主に "dotnet "コマンドを使用して行われます。
そのため、ビルドやデプロイを行うには、.NET Coreランタイムがインストールされている必要がありますが、.NET Coreはまだサポートされているビルドターゲットではありません。
そのほか、対象となる.NET Frameworkのバージョンが4.0から4.6.1に更新されました。
しかし、4.6.1よりも高いバージョンの.NET Frameworkに対応したビルドは可能です。
ローカルNuGetリポジトリ
v5 SDK では、サーバーアプリケーションの開発に使用される主要なライブラリが、ローカル NuGet パッケージとして提供されています。
- ExitGamesLibs (ExitGamesLibs.dll)
- ExitGames.PhotonHostRuntimes(PhotonHostRuntimesInterfaces.dll)
- ExitGames.Logging(ExitGames.Logging.dll)
- ExitGames.Logging.Log4Net (ExitGames.Logging.Log4Net.dll)
これは、SDK フォルダーのルートにある「nuget.config」および Nuget パッケージを介して行われます。
自動的に行われない場合は、「nuget.config」ファイルからパッケージソース「WorkspaceNuget」を手動で追加することができます。
フィードバック制御システムの改善(LoadBalancer)
LoadBalancerで使用されるフィードバック制御システムが強化され、
フィードバックレベルが2倍になりました(以前は5段階でしたが、現在は10段階)。
また、Priority と Reserve を導入しました。
新しいサーバーエラーコード
HttpLimitReached
: 32745。制限に達したため、HTTPリクエストが失敗したことを意味します。ExternalHttpCallFailed
: 32744。宛先のWebサービスに関連する問題のために、HTTPリクエストが失敗したことを意味します。OperationLimitReached
: 32743。制限に達したため、操作がブロックされたことを意味します。SlotError
です。32742。予想されるユーザーの更新にエラーがあったことを意味します。SecureConnectionRequired
: 32740。ロードバランシングセクションの "RequireSecureConnection "設定で有効になっているセキュアな接続をサーバーが要求しているため、ピアが切断されたことを意味します。EventCacheExceeded
: 32739。これは、制限に達したため、イベントキャッシングがキャンセルされたことを意味します。ExpectedGSCheckFailure
: 32738。クライアントがマスターサーバーによって提供され、認証トークンで暗号化された、期待される正しいGameServerに接続しなかったため、参加操作が失敗したことを意味します。
これには、GameServerの設定である "TokenCheckExpectedHostAndGame "が有効になっている必要があります。ExpectedGameCheckFailure
: 32737。クライアントがMasterServerから提供され、auth tokenで暗号化された正しいGameId/RoomNameを提供しなかったため、参加オペレーションが失敗したことを意味します。
これには、GameServerの設定である "TokenCheckExpectedHostAndGame "が有効になっている必要があります。AuthRequestWaitTimeout
: 32736。これはエラーコードではなく、切断理由です。
AuthRequestWaitTimeout
: 32736。これはエラーコードではなく、切断理由です。
マスターサーバーでのみ発生します。
タイムアウト時間は、マスターの設定「AuthTimeout」で設定できます。
デフォルトは1200000ms(20分)です。ConnectionSwitch
: 32735。 エラーコードではなく、切断理由です。
これは、切断されたピアが、(同じセッショントークンを使って)すぐに再入室したために、そのルームのアクティブなアクターと入れ替わったことを意味します。ActorRemoved
: 32734 。エラーコードではなく、切断の理由です。
これは、対応するアクターが部屋から削除されたために、ピアが切断されたことを意味します。
その他の変更点
修正済み
- サーバーは、認証操作の結果として、すべての場合に、期待どおりにUserIdを返すようになりました。
クライアントまたは認証プロバイダによってUserIdが設定されていない場合、サーバで生成されたGUIDが返されます。
v4では、このような場合、サーバーはUserIdを返しませんでした。 - また、認証時に、Nicknameが認証プロバイダによって設定されていない場合、サーバは何も返しません。
v4では、この場合、サーバーはNULLのNicknameを返していました。 - サーバーは、同じアクターが同じインタレストグループに複数回追加されることを許可しないようになりました。
これはv4では可能でしたが、そのアクターがそのインタレストグループに送信した同じイベントを複数回受信していました。 - サーバーはセッショントークンに対応するようになり、その結果、quick rejoin機能が期待どおりに動作するようになりました。
- well-known roomプロパティを使用してルーム作成後にExpected Usersを設定するようになりました。
追加
- PlayerTTLとEmptyRoomTTLが、ルーム作成後に設定(または変更)できる、既知のルームプロパティとして追加されました。
- ルーム作成時にルームフラグが追加されます:
- "Delete Null Properties":null値のプロパティは、サーバー上で削除されます。
- "Broadcast Properties Change": SetPropertiesを呼び出すクライアントは、PropertiesChangedイベントも受信します。
- "SuppressPlayerInfo": 参加プロセスにおいて、参加したユーザーの情報を取得しないようにします。ただし、GetProperties操作によって情報を取得することは可能です。
- 「CheckUserOnJoin」、「SuppressRoomEvents」、「PublishUserId」および「DeleteCacheOnLeave」(「CleanupCacheOnLeave」とも呼ばれます)がルームフラグになりました。
これらは以前、リクエストパラメータまたは既知のルームプロパティでした。 - SQLロビーでの新しい「GetGameList」操作。
- SQLインジェクションからマッチメイキングフィルター(SQLクエリ)を保護することで、SQLロビーのセキュリティを強化。
- パフォーマンスカウンターをさらに追加。
リストはこちらから参照してください. - JoinRandomRoomによって、複数の「連鎖した」カンマ区切りのSQLフィルターを保持することが許可されました(最大3個)。
- JoinRandomRoomによって、マッチングが見つからない場合のルーム作成が許可されました。
変更
- セキュアなリスナー向けの証明書のフォーマットと設定を、Secure Channel (SChannel)から OpenSSLに切り替えました。
- v5でのカスタム認証は、マスターサーバーではなくネームサーバーで実行されます。カスタム認証はマスターサーバーでも依然として利用可能ですが、今後マスターサーバーでは利用不可となる予定です。ネームサーバーにFacebookとSteamという認証プロバイダーを組み込んである点からも、v5への移行をお勧めします。
その他の変更
廃止
- CounterPublisherが廃止されました。
関連するソースやバイナリ(ファイルや設定)はSDKから削除されています。
代わりにTelegrafまたはWindows PerfMonをご利用ください。 - MMOプロジェクト
- StarDustテストコンソールクライアント
Photon Controlの変更点
- "MMO Demo" インスタンスのサブメニューが削除されます。
- "LoadBalancing (MyCloud) "サブメニューから "Run TestClient (LoadBalancing) "が削除されました。
- "Edit Nameserver.json" ショートカットが追加されました。