针对大厅进行心跳检测
Send heartbeat requests to keep a lobby active and prevent it from being marked as inactive or deleted.
阅读时间2 分钟最后更新于 1 个月前
如果大厅在规定的时间内没有被厅主更新或发送心跳请求,系统会将大厅标记为不活动。大厅的默认活动寿命为 30 秒。您可以在您的项目为大厅配置活动寿命。
隐藏不活动大厅的主要目的是防止玩家持续找到/加入被遗弃的大厅。处于不活动状态的公开大厅不会显示在查询结果中,也无法通过“快速加入”来加入,并且系统最终会自动删除处于不活动状态的公开大厅和私人大厅。通过由厅主进行更新或发送心跳请求,可以重新激活处于不活动状态的大厅。
处于不活动状态 1 小时后,大厅会被视为已过期。系统可能会随时删除已过期的大厅。删除后,大厅便不会再出现在查询中,也无法通过任何 API 获取。此持续时间不可配置。您可以通过更新大厅或发送心跳请求来重新激活已过期的大厅。
以下代码示例展示了如何将协同程序与大厅创建流程相集成,以便定期针对新的大厅进行心跳检测:
C#
虽然厅主应当定期针对使用中的大厅进行心跳检测,但厅主还应谨慎管理这些大厅并在使用后将其删除。一个非常简单的方法是在关闭期间遍历已创建的大厅。 以下代码示例展示了如何利用 MonoBehavior 的 OnApplicationQuit() 函数来删除已创建的大厅: 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; }
ConcurrentQueue<string> createdLobbyIds = new ConcurrentQueue<string>();void OnApplicationQuit(){ while (createdLobbyIds.TryDequeue(out var lobbyId)) { LobbyService.Instance.DeleteLobbyAsync(lobbyId); }}