Делаю проект на 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, там такая же проблема возникает. Пользователь подключается, но не отключается при переходе на другую страницу или при закрытии браузера. Вот
видео.