В настоящее время я храню все подключенные идентификаторы подключений пользователя в моей базе данных, сопоставляя их с фактическими пользователями приложений. Что мне делать, здесь довольно просто: я добавляю идентификатор соединения в базу данных при запуске события OnConnected
. Затем я удаляю это соединение из базы данных при запуске события OnDisconnected
.Отслеживание идентификаторов соединения SignalR, чтобы узнать, действительно ли они существуют
Однако в некоторых случаях (например, когда процесс завершается и т. Д.), Я не получаю событие разъединения. Это делает мою таблицу соединений ненадежной, потому что я не могу быть уверен, что пользователь подключен к одному или нескольким клиентам. Например, здесь есть блок кода на моем OnDisconnected
метода:
HubConnection hubConnection = _hubConnectionRepository.GetAll()
.FirstOrDefault(conn => conn.ConnectionId == connectionId);
if (hubConnection != null)
{
_hubConnectionRepository.Delete(hubConnection);
_hubConnectionRepository.Save();
}
if (!_hubConnectionRepository.GetAll().Any(conn => conn.UserId == user.Id))
{
Clients.Others.userDisconnected(username);
}
Как вы видите, я проверить, есть ли какие-либо другие соединения, связанные с этим пользователем только после того, как я удалить его/ее текущее соединение. В зависимости от случая я передаю сообщение всем подключенным клиентам.
Что я хочу здесь, это что-то вроде этого: чтобы иметь возможность опросить систему SignalR с массивом идентификаторов подключения и вернуть отключенные, чтобы я мог удалить их из своего списка соединений внутри базы данных. Насколько я помню из моего разговора с Дэвидом Фаулером, сегодня это невозможно, но какой предпочтительный подход к таким случаям?
Привет, Я только начинаю использовать SignalR и хочу сделать что-то, что связано с отслеживанием. Мне нравится твоя идея об этом. Удивление, если через более чем 2 года это все еще верный путь или если есть близкие решения, которые сегодня могут быть скорее решением. кто угодно? –