@Gedonist

Как понять, что пользователь SignalR закрыл браузер (или перешел на другую страницу)?

Делаю проект на Blazor Server Side, для обмена сообщениями между пользователями использую SignalR Hub.
Внутри хаба веду список пользователей онлайн:
public static List<MessagesHubUser> _messagesHubUsers = new List<MessagesHubUser>();


При отключении пользователя убираю его из списка:
public override async Task OnDisconnectedAsync(Exception e)
        {
            _messagesHubUsers.RemoveAll(x => x.ConnectionId == Context.ConnectionId);
        await Clients.All.SendAsync("UsersListChanged");
            await base.OnDisconnectedAsync(e);
        }


Но это событие не срабатывает, если пользователь закрывает браузер. В этом случае он по-прежнему находится в списке пользователей онлайн. В SinglaR есть встроенная функция таймаута, но здесь она не срабатывает.
Как сделать, чтобы при выключении браузера или потере связи пользователь отключался в хабе?

UPD: Для проверки загрузил SignalRChat с github, переопределил методы OnСonnectedAsync и OnDisconnectedAsync, там такая же проблема возникает. Пользователь подключается, но не отключается при переходе на другую страницу или при закрытии браузера. Вот видео.
  • Вопрос задан
  • 276 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы