현재 연결된 모든 사용자의 연결 ID를 실제 응용 프로그램 사용자에게 매핑하여 데이터베이스에 저장합니다. 내가 여기서하는 일은 꽤 간단하다 : OnConnected
이벤트가 발생하면 데이터베이스에 연결 ID를 추가한다. 그런 다음 OnDisconnected
이벤트가 발생하면 데이터베이스에서 해당 연결을 제거합니다.SignalR 연결 ID를 추적하여 실제 존재 여부 확인
그러나 일부 경우 (예 : 프로세스가 종료 될 때 등) 연결 해제 이벤트가 발생하지 않습니다. 이것은 사용자가 하나 이상의 클라이언트에 연결되어 있는지 확신 할 수 없기 때문에 연결 테이블을 신뢰할 수 없게 만듭니다. 보시다시피
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);
}
, 나는 내가 그/그녀의 현재 연결을 제거 직후 해당 사용자에게 관련된 다른 연결이 있는지 확인 : 예를 들어, 여기 내 OnDisconnected
방법에 코드 블록이다. 케이스에 따라 연결된 모든 클라이언트에게 메시지를 브로드 캐스트합니다.
내가 원하는 것은 연결 식별자 배열을 사용하여 SignalR 시스템을 폴링하고 연결 해제 된 연결을 다시 가져와 데이터베이스 내의 연결 목록에서 제거 할 수 있도록하는 것입니다. David Fowler와의 대화에서 기억하는 한, 오늘은 불가능하지만 그런 경우에 대해 바람직한 접근 방법은 무엇입니까?
안녕하세요, 저는 SignalR을 사용하기 시작했으며 추적이 필요한 작업을 수행하려고합니다. 나는 이것에 대한 당신의 생각을 좋아합니다. 2 년이 지난 후에도 여전히 올바른 방법인지 아니면 솔루션으로 오늘보다 더 많은 유사 솔루션이 있는지 궁금합니다. 누군가? –