通信帯域制限機能を適用する

目次

  概要
  利用方法
  制限事項(オブジェクト同期)
  内部ロジック(オブジェクト同期)
  制限事項(RPCメッセージ)
  内部ロジック(RPCメッセージ)


概要

MUN 2.2.0 以降で実装された「送信帯域制限機能」を利用する

  ルーム入室中の1フレーム内における「ルーム内通信負荷」を軽減する汎用的な対策法として、
  MUN 2.2.0 から「送信帯域制限機能」を実装いたしました。

  この機能を有効に使用することで、1フレーム内における「RPCメッセージ」「オブジェクト同期」の送信量を
  簡単に調整することができます。


利用方法

MonobitServerSettings.asset 内の「Max-Limit Traffic Bytes Settings」を調整する

  送信帯域制限機能は、Unityエディタ上で Assets/Monobit Unity Networking/Resources/MonobitServerSettings.asset を開き、
  その Inspector から調整します。
  MonobitServerSettings.asset の Inspector 項目内に「Max-Limit Traffic Bytes Settings」があります。
  この項目内の
    ・ Send(Object Stream) : 1フレーム内における、オブジェクト同期通信データの送信バイト数の上限値
    ・ Send(RPC) : 1フレーム内における、RPC メッセージ通信データの送信バイト数の上限値
  を調整することができます。



制限事項(オブジェクト同期)

「Send(Object Stream)」の設定範囲

  設定値の許容範囲は 1~2147483647(1byte~2Gbyte)です。
  この値の範囲未満、またはこの値の範囲超過の数値を入力しても、データとして反映されません。

設定値を超過した場合の、MUN クライアントの挙動について

  オブジェクトデータ1つにつき、ここで設定された上限値を超えて送信しようとした場合、直ちに MUN サーバから切断されます
  ロビー&ルームから強制退室され、接続状態も維持されません。

  

1オブジェクトにおける、同期データ送信のバイト数の算出方法について

  送信データのバイト数については、以下の計算式に従って机上計算できます。
  値の設定値を変更する場合の参考にしてください。

   ※ Animator(x Byte) の内訳は、「AnimationController に含まれるパラメータ(パラメータごとのバイト数の総計)」によって変動
   ※ 独自同期(y Byte) の内訳は、「OnMonobitSerializeView()の実装内容(キュー送信処理されるデータごとのバイト数の総計)」によって変動


内部ロジック(オブジェクト同期)

1フレームにおけるオブジェクト同期の累計送信バイト数が、「Send(Object Stream)」の設定値未満の場合

  この場合、オブジェクト同期データの送信自体に何の影響も及ぼしません。
  MonobitNetwork.updateStreamRate で指定されたフレームごとに、すべてのオブジェクト同期データがサーバに送信され、
  サーバ側で同一ルーム内のクライアントに対し拡散されます。

1フレームにおけるオブジェクト同期の累計送信バイト数が、「Send(Object Stream)」の設定値以上に達した場合

  この場合、超過したオブジェクト、およびその同期データについて、以下の処理が施されます。
 1. 超過したオブジェクトについては、そのフレームでの送信はキャンセルされます。
   キャンセルと同時に、同期オブジェクトの内部パラメータとして用意された「同期保留フレームカウンタ」が加算されます。

 2. MonobitNetwork.updateStreamRate の設定値に関係なく、「同期保留フレームカウンタが最も大きいオブジェクト」から順に、
   次フレームにて「Send(Object Stream)」の数値許容範囲内で送信します。
   このフレームでも超過してしまうオブジェクトが発生した場合、さらに「同期保留フレームカウンタ」が加算されます。

 3. 同期保留フレームカウンタが 0 でないオブジェクトが存在する限り、2. を繰り返します。

 4. 次の MonobitNetwork.updateStreamRate の設定フレーム数に達した場合でも、同期保留フレームカウンタが 0 でないオブジェクトが存在した場合、
   同期保留フレームカウンタが 0 でないオブジェクトが優先されて送信されます。
   この場合、同期保留フレームカウンタが 0 になる可能性は極めて低くなるため、常にオブジェクト同期の送信遅延が発生します。


制限事項(RPCメッセージ)

「Send(RPC)」の設定範囲

  設定値の許容範囲は 1~Int32.MaxValue(2147483647) バイトです。
  この値の範囲未満、またはこの値の範囲超過の数値を入力しても、データとして反映されません。

設定値を超過した場合の、MUN クライアントの挙動について

  1つのRPCメッセージ(メソッド名のバイト数を含む)につき、ここで設定された上限値を超えて送信しようとした場合、直ちに MUN サーバから切断されます
  ロビー&ルームから強制退室され、接続状態も維持されません。

1つのRPCメッセージにおける、送信バイト数の算出方法について

  送信データのバイト数については、以下の計算式に従って机上計算できます。
  値の設定値を変更する場合の参考にしてください。

   ※ RPC データ(x Byte) の内訳は
     「RPCでコールされるメソッドの名前(文字列バイト数)」+「RPCでコールされるメソッドの引数(引数ごとのバイト数の総計)」によって変動



内部ロジック(RPCメッセージ)

1フレームにおけるRPCメッセージの累計送信バイト数が、「Send(RPC)」の設定値未満の場合

  この場合、RPCメッセージの送信自体に何の影響も及ぼしません。
  MonobitNetwork.sendRate で指定されたフレームごとに、すべてのRPCメッセージがサーバに送信され、
  サーバ側で同一ルーム内のクライアントに対し、送信方式に応じて拡散されます。

1フレームにおけるRPCメッセージの累計送信バイト数が、「Send(RPC)」の設定値以上に達した場合

  この場合、超過したRPCメッセージについて、以下の処理が施されます。
 1. 超過したRPCメッセージについては、そのフレームでの送信はキャンセルされ、滞留します。

 2. MonobitNetwork.sendRate の設定値に関係なく、滞留された順番でRPCメッセージについて、
   次フレームにて「Send(RPC)」の数値許容範囲内で送信します。
   このフレームでも超過してしまうRPCメッセージが発生した場合、さらに滞留します。

 3. 滞留しているRPCメッセージが存在する限り、2. を繰り返します。

 4. 次の MonobitNetwork.sendRate の設定フレーム数に達した場合でも、滞留したままのRPCメッセージが存在した場合、そのメッセージが最優先で送信されます。
   この場合、RPCメッセージの送信遅延が発生する可能性が著しく高くなります。