持続的接続
ノート: Netcode for GameObjects (NGO) は、接続を自動的に維持します。Relay と UTP を使用する を参照してください。
Relay サーバーは、一定時間アクティビティがないクライアントを自動的に 切断 します。Relay がクライアントを切断するまでのデフォルトの生存時間 (TTL、time to live) は、10 秒 です。ホスト単独の場合の切断までの TTL は、60 秒 (BIND
メッセージの後かつ CONNECT
メッセージとともにピアがそれらに接続される前) です。このクライアントに関連して Relay サーバーが受信した (送信者または受信者としての) メッセージがある場合、この タイムアウト はリセットされます。
メッセージの頻度が低いゲームの場合は、定期的に呼び出すメソッドで接続を維持することが重要です。たとえば、Update()
ループ内で呼び出すなどです。NGO を使用した Relay を使用している場合は、ネットワークマネージャー (NetworkManager
) によって接続が自動的に維持されます。ただし、これは StartClient
または StartHost
を正常に呼び出した後にのみ行われます。
UTP を使用した Relay を使用している場合は、ホストと参加プレイヤーの両方の NetworkDriver
への定期的な更新がスケジュールされていれば、UTP によって接続が自動的に維持されます。通常、これは新しい接続を受け入れたり、メッセージを受信したりするために行います。以下のコードサンプルは、接続を維持するためのコードを示しています。
//Call the below regularly, e.g., in Monobehaviour.Update()
void Example_KeepingConnectionAlive()
{
// Update the NetworkDrivers regularly to ensure the host/player is kept online.
if (HostDriver.IsCreated && isRelayServerConnected)
{
HostDriver.ScheduleUpdate().Complete();
//Accept incoming client connections
while (HostDriver.Accept() != default(NetworkConnection))
{
Debug.Log("Accepted an incoming connection.");
}
}
if (PlayerDriver.IsCreated && clientConnection.IsCreated)
{
PlayerDriver.ScheduleUpdate().Complete();
//Resolve event queue
NetworkEvent.Type eventType;
while ((eventType = clientConnection.PopEvent(PlayerDriver, out _)) != NetworkEvent.Type.Empty)
{
if (eventType == NetworkEvent.Type.Connect)
{
Debug.Log("Client connected to the server");
}
else if (eventType == NetworkEvent.Type.Disconnect)
{
Debug.Log("Client got disconnected from server");
clientConnection = default(NetworkConnection);
}
}
}
}