マスターサーバー接続¶
マスターサーバーは、現在実行中のルームサーバーと利用可能なルームに関する情報を保持しています。マスターサーバー接続は、StrixNetwork
インスタンスのmasterSession
メンバーに保存されています。
まずマスターサーバーに接続する必要がありますが、これはインターネットアドレスやポートなどのルームサーバーに関する情報や利用可能なルームに関する情報を取得するためです。
一定時間使用されないとマスターサーバー接続は閉じられることがあります。しかし、一度マスターサーバー接続が確立すると、内部に接続情報が保存され、必要に応じてマスターサーバー接続が自動的に復元されます。
Strix Serverの使用を終える際には、マスターサーバー接続を明示的に切断することができます。
接続¶
接続に先立って、StrixNetwork
シングルトンのapplicationId
プロパティにサーバーで指定されている値を設定しておきます。次に、StrixNetwork
シングルトンのConnectMasterServer()
メソッドを呼び出して接続します。この際にマスターサーバーのドメイン (ホスト) 名かIPアドレスを使用します。
// デフォルトのポート番号
void ConnectMasterServer(string host, StrixNetworkConnectEventHandler connectEventHandler, StrixNetworkConnectFailedEventHandler errorEventHandler)
// ユーザー指定のポート番号
void ConnectMasterServer(string host, int port, StrixNetworkConnectEventHandler connectEventHandler, StrixNetworkConnectFailedEventHandler errorEventHandler)
注釈
Strix Cloudを使用する場合は、アプリケーションIDはStrix Cloudが割り当て、Strix Cloudのご自分のアプリケーションのアプリケーションダッシュボードに表示されます。マスターサーバーのドメイン名も、ダッシュボードに [マスターホスト名] として表示されます。
Strix Cloudは常にデフォルトのポート番号 (後述) を使用するため、最初のオーバーロードを使用できます。
Strix Cloudを使用する際には、IPアドレスを指定するべきではありません。IPアドレスはサーバーインスタンスの運用中に変化する可能性があります。
既に接続している場合は、異なるhost
とport
パラメーターを使用してこのメソッドを再度呼び出すと、新しい接続を開く前に、まず既存の接続が閉じられます。
接続が確立されると、StrixNetwork
シングルトンのmasterSession
プロパティを介して、必要に応じてマスターサーバーセッションにアクセスできるようになります。
URLを用いた接続¶
Strix Unity SDKのバージョン1.5.0以降では、ConnectMasterServer
の第1のオーバーロードのhost
パラメーターに、IPアドレスやホストドメイン名を指定することに加えてURL形式の文字列を指定できるようになりました。
ホスト文字列の構文は次の通りです。
[protocol://]address[:port][/path]
ここに
省略可能なprotocolはtcp、udp、ws、wssのいずれかです。
必須のaddressはIPアドレスまたはドメイン名です。
省略可能なportはポート番号です。
省略可能なpathはサーバーの設定によって決まる文字列です。
このURL形式の文字列のプロトコルは次の通りです。
文字列 |
説明 |
---|---|
(省略した場合) |
hostの文字列全体をIPアドレスかドメイン名として、portとpathは省略します。プラットフォームのデフォルトのトランスポートプロトコルを使用します。 |
tcp:// |
トランスポートはTCPになります。 |
udp:// |
トランスポートはReliable UDPになります。(RUDPはStrix Cloudでは使用できません.) |
ws:// |
トランスポートは通常のWebSocketになります。 |
wss:// |
トランスポートはセキュアWebSocketになります。 |
portを省略すると、プロトコルのデフォルトのポート番号が使用されます。それは以下の通りです。
使用するプロトコル |
ポート番号 |
---|---|
TCP |
9122 |
Reliable UDP |
9122 |
通常のWebSocket (ws) |
80 |
セキュアWebSocket (wss) |
443 |
注釈
セキュアWebSocketのURLではデフォルトのポート番号は443ですが、Strix CloudのマスターサーバーはWebSocketの場合も常にポート9122を使用します。Strix CloudでセキュアWebSocketを使用するときには、ポート番号を省略できません。
TCPかUDPを使用するときには、pathは無視されます。
WebSocketプロトコルを使用するときには、pathは接続ハンドシェイクの一部としてサーバーに送信されます。pathを省略すると"/"
であると見なします。pathはサーバーが期待するパスと一致する必要があります。Strix Cloudを使用する場合は、サーバーはパスとして常に"/"
を期待するため、ホスト文字列ではパスを省略します。
例:
"000000000000000000000000.game.strixcloud.net"
: TCPでドメイン名が000000000000000000000000.game.strixcloud.netであるサーバーのポート9122へ接続。"tcp://198.51.100.2:8888"
: TCPで198.51.100.2にあるサーバーのポート8888へ接続。"wss://000000000000000000000000.game.strixcloud.net:9122"
: セキュアWebSocketでドメイン名が000000000000000000000000.game.strixcloud.netであるサーバーのポート9122へ空のパス文字列を用いて接続。
注釈
WebSocketのプロトコルは (通常のものもセキュアなものも) WebGLプラットフォームで使用することを意図しています。これらのプロトコルはTCPと比べると、CPU使用率もネットワークトラフィックもオーバーヘッドが大きくなります。WebGLプラットフォームをターゲットにしているか、WebGLプラットフォームとの間のクロスプラットフォーム対戦を予定しているのでないかぎり、WebSocketトランスポートの使用はお勧めしません。
(WebGLサポートに関する詳細はHTML5とWebGLを利用したクライアントの作成方法をご覧ください。)
Strix Cloudは、トランスポートとしてTCPとセキュアWebSocket (wss) をサポートします。Reliable UDPと通常のWebSocket (ws) は利用できません。
切断¶
マスターサーバーは、StrixNetwork
のDisconnectMasterServer()
メソッドを用いて明示的に切断できます。
void DisconnectMasterServer()
明示的に切断した後は、内部的に保存されていた接続情報は破棄され、マスターサーバーを必要とする全ての機能の呼び出しが失敗するようになります。通常、マスターサーバーの切断は、ゲームのマルチプレイヤーモードを抜けて、ネットワーク機能を終了するときに行います。
状態¶
マスターサーバー接続のステータスがStrixNetwork.masterSession
のIsConnected
値に保存されています。
bool isConnected = StrixNetwork.instance.masterSession.IsConnected;
マスターサーバー接続は常に有効ではありません。SDKはその利用状況を把握し、リソースを節約するためにタイムアウトによって接続を閉じるからです。しかし、ConnectMasterServer
で指定された接続情報が内部的に保存されており、マスターサーバー接続が再び必要になった際には自動的に接続が復元されます。この処理はユーザーコードに対して透過的であり、気にする必要はありません。
masterSession.IsConnected
は実際の接続状態を示します。つまり、使用されなかったためにマスターサーバー接続が閉じられると、これはfalseを返します。通常はIsConnected
の状態も気にする必要はありません。