로비 하트비트
로비가 특정 시간 이내에 업데이트되지 않거나 호스트가 하트비트 요청을 전송하지 않은 경우 비활성으로 표시됩니다. 로비의 기본 활성 수명 주기는 30초입니다. 프로젝트에서 로비의 활성 수명 주기를 설정할 수 있습니다.
업데이트는 로비 프로퍼티를 변경한 경우에만 산정됩니다. 호스트의 플레이어 데이터에 대한 변경 사항은 제외되며 작동에 영향을 주지 않는 업데이트도 포함되지 않습니다.
비활성 로비가 표시되지 않도록 하는 주된 이유는 플레이어가 사용되지 않는 로비를 계속 찾거나 참여하는 것을 방지하기 위해서입니다. 비활성 공개 로비는 쿼리 결과에 표시되지 않으며, 더불어 ‘빠른 참여’를 통해서도 참여할 수 없습니다. 공개 비활성 로비와 비공개 비활성 로비 모두 결국에는 자동으로 삭제됩니다. 비활성 로비를 업데이트하거나 호스트가 하트비트 요청을 전송하면 다시 활성화할 수 있습니다.
비활성 로비는 LastUpdated 필드에서 필터를 사용하여 쿼리에서 자동으로 제외시킬 수 있습니다. LastUpdated 필터를 포함하면 기본 필터가 오버라이드되고 쿼리 결과에 비활성 로비를 포함시킬 수 있습니다.
Get Lobby API는 비활성 상태로 인해 영향받지 않습니다.
비활성 상태가 1시간 동안 유지되면 로비는 만료 상태로 간주됩니다. 만료된 로비는 언제든지 삭제될 수 있습니다. 삭제되면 로비는 더 이상 쿼리나 API에서 사용할 수 없습니다. 이 기간은 설정할 수 없습니다. 로비를 업데이트하거나 하트비트를 전송하여 만료된 로비를 다시 활성화할 수 있습니다.
다음 코드 샘플은 코루틴과 로비 생성을 연동하여 주기적으로 새 로비를 하트비트하는 방법을 보여 줍니다.
C#
async Task<Lobby> CreateLobbyWithHeartbeatAsync()
{
string lobbyName = "test lobby";
int maxPlayers = 4;
CreateLobbyOptions options = new CreateLobbyOptions();
// Lobby parameters code goes here...
// See 'Creating a Lobby' for example parameters
var lobby = await LobbyService.Instance.CreateLobbyAsync(lobbyName, maxPlayers, options);
// Heartbeat the lobby every 15 seconds.
StartCoroutine(HeartbeatLobbyCoroutine(lobby.Id, 15));
return lobby;
}
IEnumerator HeartbeatLobbyCoroutine(string lobbyId, float waitTimeSeconds)
{
var delay = new WaitForSecondsRealtime(waitTimeSeconds);
while (true)
{
LobbyService.Instance.SendHeartbeatPingAsync(lobbyId);
yield return delay;
}
호스트는 로비가 사용 중일 때는 주기적으로 하트비트해야 하지만, 나중에 사용하지 않을 때는 이러한 로비를 삭제해야 한다는 사실에 유의해야 합니다. 종료 중에 생성된 로비를 반복하면 이 작업을 간단히 수행할 수 있습니다.
다음 코드 샘플은 MonoBehavior의 OnApplicationQuit() 함수를 활용해 생성된 로비를 삭제하는 방법을 보여 줍니다.
C#
ConcurrentQueue<string> createdLobbyIds = new ConcurrentQueue<string>();
void OnApplicationQuit()
{
while (createdLobbyIds.TryDequeue(out var lobbyId))
{
LobbyService.Instance.DeleteLobbyAsync(lobbyId);
}
}