ルームサーバー接続

ルームサーバーはStrixの主要部分です。異なるルームの情報とその中のプレイヤーリストを含んでいます。ルームサーバーは、ルーム内のプレイヤー間のメッセージやイベントを制御し中継します。ルームに参加するには、ルームサーバーへの接続を確立する必要があります。

このページの説明に従い明示的にルームサーバーへ接続することもできますし、必要に応じて自動的にルームサーバーへ接続する関数を呼び出して暗黙に接続することもできます。

ノードルーム

Strix Unreal SDKのノードという用語はルームサーバーを意味します。1台のルームサーバーは複数のルームを含むことができますし、1つのサーバーシステム(サーバークラスター)には複数のルームサーバーがあるかもしれません。特定のルームにアクセスするために、SDKはルームサーバーを特定する情報と、その中でルームを特定する情報の組を知っている必要があります。

Strix Unreal SDKでは、この組のことをNodeRoomと呼ぶことがあります。NodeRoomとは、ルームサーバーとルームの組み合わせであり、ルームサーバーの情報を伴った特定のルームを表します。NodeRoomを扱う関数の多くは、自動的に適切なルームサーバーに接続するようになっています。これにより、ルームに関する操作を行う際に、最初に特定のルームサーバーに接続する必要をなくし、操作が簡略化されます。

ルームサーバーの検索

ルームサーバーに明示的に接続するには、まず利用可能なルームサーバーを知っている必要があります。クラスターのマスターサーバーには、マスターサーバーに接続されているルームサーバーの情報があります。Strix Unreal SDKは、この情報を照会するための関数を提供しています。

SearchNode関数は、指定された条件に一致する実行中のルームサーバーを検索します。SearchNodeRoom関数は、指定された条件に一致するルームを検索し、ルームとルームサーバーの両方の情報を返します。

注釈

SearchNodeは、条件に合うルームサーバーの一覧を返します。ただし、マスターサーバーはクライアントが指定した条件に対して暗黙の条件を追加し、一覧を絞り込むことがあります。Strix Cloudを使用していて、サーバーがバージョン1.2.0以降であれば、マスターサーバーはルーム数が上限になっているルームサーバーを暗黙に除外します。つまり、マスターサーバーは、ルームの数が最大ルーム数の設定値に達したルームサーバーを返しません。

ルームサーバーへの接続

ルームサーバーへの接続は、いくつかの異なる関数を使用して行うことができます。最も分かりやすいのはConnectToRoomServer関数です。これは、ホスト名、ポート番号、プロトコルを指定してルームサーバーに接続します。これらの情報はSearchNodeSearchNodeRoom関数の結果から取得できます。

JoinNodeRoomJoinRandomNodeRoomCreateNodeRoomの各関数はどれもクライアントをルームに参加させますが、その過程でそのルームのルームサーバーへの接続も行います。JoinNodeRoomにはルームサーバーの情報を含むStrix Node Room Info構造体が必要なので、あらかじめルームサーバーの情報が必要になります。これら3つの関数はどれもマスターサーバー接続が必要です。ルームサーバー接続は必要ありません。

複数のルームサーバーやルームへの接続を容易にするために、ルームサーバーへの接続には、チャネルの引数が必要です。チャネルとは接続を特定するIDです。チャネルIDはその特定の接続にマップされます。コンポーネントや関数は、引数に指定されたチャネルIDに対応する接続を操作します(複数のルームとチャネルを参照)。

注釈

SDKでは、1つのチャネルは、1つのルームサーバー接続と最大1つのルームのみに制限しています。2つ以上のチャネルを用いて同じルームサーバーに接続しても構いません。

注釈

ConnectToRoomServer関数にはprotocol引数が必要です。ここには、Strix Node構造体から取得した値を渡します。

なお、Strix Cloudを使用する場合には、ルームサーバーに接続する際のプロトコルは常に "TCP" です。

切断

DisconnectRoomServer関数は、クライアントをルームサーバーから切断します。これにより、それ以降は同期が行われなくなり、クライアントがそのチャネルのそのルームから切断されることになります。

状態

IsRoomServerConnected関数を使用して、ルームサーバーに接続されているかどうかを確認できます。確認したい接続のチャネルIDを指定します。

タイムアウト

ルームサーバー接続は、一定時間アクティブでないとタイムアウトします。マスターサーバー接続とは異なり、ルームサーバータイムアウトでは接続が完全に失われるため、プレイヤーがそのチャネルのルームの中にいるとルームを離れることになります。その結果、ルームサーバーへの再接続が必要になります。

Strix Unreal SDKは、ハートビートメッセージを一定間隔で自動的にルームサーバーに送信するようになっています。デフォルトの設定では、ハートビートの間隔は10秒間、サーバーのタイムアウトは120秒間になっているため、通常の動作中にルームサーバー接続のタイムアウトが発生することはありません。

注釈

ハートビートタイムアウトはサーバー側で設定することができます。ハートビートの時間間隔もSDKで変更することができます(詳しくはサーバー同期時刻を参照してください)。これらの値を適切に設定しておかないと、意図せずにルームサーバー接続が切断されてしまうことがありますので、変更する際には注意してください。