2016-05-31 5 views
1

내 SignalR 앱에 2 개의 허브가 있다고 가정 해 보겠습니다. connectionsIds -> userIds를 로컬 캐시 사전에 매핑하고 있습니다.SignalR : 허브의 OnDissconnect 이벤트는 특정 허브에서만 호출 할 수 있습니까?

현재 로직과 같이입니다 :와

OnConnected -> (존재하지 않는 경우) 사전에 새로운 "connectionId는 사용자 ID하기"항목을 추가합니다. OnDisconnected와

-> 제거 그 (있는 경우)

HUB2가 연결된 상태를 유지합니다 동안 Hub1이 해제됩니다 어떤 시나리오가 있습니까 사전에서 항목을 "connectionId는 사용자 ID합니다"?

그렇다면 Hub2가 여전히 연결되어 있어도 사전에서 항목을 제거하므로 현재 논리에 결함이 있습니다. 각 허브에 대해 2 개의 사전을 처리해야합니다.

P. 나는 연결 매핑을 처리하기 위해 SignalR 문서를 살펴 봤으며 항상 허브 당 하나의 사전을 사용하고있는 것으로 보인다. 그래서 정말 필요한지 알고 싶습니다.

+1

안녕 피르. 단일 제안을 사용하여이 매핑을 유지할 수 있습니다. 구현하기 쉽고 사전을 유지 관리해야 할 필요가 없습니다. 확인 [이] (http://stackoverflow.com/questions/37455608/handling-concurrent-connections-in-siganlr/37458129#37458129) –

+0

매우 우아한 솔루션! 나는 그 길로 갈 것 같아. 덕분에 – Ofir

답변

1

설명서에 따르면 Signalr은 여러 허브에 대해 하나의 연결을 공유합니다. 따라서 OnDisconnect에 대한 호출을 받으면 모든 허브의 연결을 끊어야합니다.

SignalR2.0은 성능이 저하되지 않고 하나의 신호로 연결을 통해 여러 허브를 처리하도록 업데이트되었습니다.

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#multiplehubs

+0

맞아, HubDispatcher 클래스의 코드를 살펴본 결과 함수는 모든 허브를 가져와 연결된 모든 허브에서 연결 해제 이벤트를 실행합니다. – Ofir