Переподключение SignalR после разрыва на стороне клиента
От: varenikAA  
Дата: 21.08.20 03:44
Оценка:
Настольная программа подключается к серверу по сигналу.
Если выдернуть на клиенте кабель на 20 секунд и потом воткнуть,
то идет реконнект на сервер OnConnectedAsync и только потом отключается OnDisconnectedAsync (30 секунд) предыдущий коннект.
Получается соединение восстановилось, а сервер уведомляет, что клиент отвалился.
При этом в хабе на сервере, даже клиентский сокет не достать, только id соединения.
Сделал так( по логике вроде клиент может только один быть), но что-то смущает. Или норм?

       private static readonly ConcurrentDictionary<string, int> connections = new ConcurrentDictionary<string, int>();

       public override async Task OnConnectedAsync()
        {
            connections.AddOrUpdate(Context.UserIdentifier, 1, (k, v) => v + 1);
            notifyService.ClientOnline(Context.UserIdentifier, Context.User.Identity.Name);
        }
        public override async Task OnDisconnectedAsync(Exception exception)
        {
            var count = connections.AddOrUpdate(Context.UserIdentifier, 0, (k, v) => v - 1);

            if (count > 0)
                return;

            notifyService.ClientOffline(Context.UserIdentifier, Context.User.Identity.Name);
        }
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.