2011-11-20 4 views
0

Google, SignalR 위키 및 SignalR 코드 자체 (예 : Broadcast 기능, Signaler 등)를 검색 한 결과 아무 것도 발견되지 않았습니다.SignalR : PersistentConnection에 대한 클라이언트 목록을 얻으십시오.

ClientIDFactory를 작성하고 ClientID를 UserID로 설정하십시오. 작동하지만 이제 사용자가 둘 이상의 브라우저/탭에서 연결할 수 없습니다.

기능을 수정하고 임의의 문자열을 UserID에 추가했습니다. 그것은 작동합니다.

이제 특정 사용자 ID로 특정 메시지를 보내려면 사용자에 대한 모든 연결을 가져 오는 방법을 찾아야합니다.

나는 클라이언트 목록 주위를 돌아 다니며 string.split()에 의해 UserID를 찾는다. 그러나 다른 방법이 유용 할 수있다.

허브를 사용하고 있지 않습니다. PersistentConnection 만.

덕분에,

+1

왜 클라이언트 목록이 필요합니까? 새로운 연결이 만들어지면 허브에있는 목록을 추적 할 수 없습니까? – davidfowl

+0

허브를 사용하고 있지 않습니다. OnConnectedAsync/OnConnected를 사용할 수없고 IIS AppPool Recycle (예 : 코드 변경)에서 사용자가 이전 세션의 쿠키로 "연결"되어이 이벤트가 발생하지 않기 때문에 자신을 추적 할 수 있습니다. (그리고 고마워요) –

+0

어느 쪽이든, 당신은 자신을 추적해야합니다. 클라이언트는 다른 컴퓨터에있을 수 있으며 여전히 알림을받습니다. 실제로는 기본 메시지 저장소 및 신호 버스에 대한 구현 세부 사항입니다. – davidfowl

답변

1

나는 당신의 접근 방식은 바로 따라서이 표면화되지 않는다 생각합니다. 서버 측에서 연결하고 연결을 끊는 방법이 있습니다. Connection에서는 일부 메타 데이터와의 연결을 유지해야하며 서버가 다시 시작되는 경우에도 고유 한 사용자 또는 고유 한 클라이언트의 메타 데이터를 확인하고 새 ID로 다시 연결할 수 있습니다. 예를

  1. 를 들어

    모바일에서 항목을 구입하는 당신이에 로그인하지 않은 경우 (어떤 메타 데이터는 사용자에게 관련 없습니다) 당신은 당신의 바구니에이 개 항목을 놓습니다. 같은 컴퓨터에서 오는 동일한 사용자로 서버가 사용자와 관련 될 수 없으므로 바탕 화면으로 이동하면 바구니에있는 두 항목이 표시되지 않습니다.

  2. (현재 연결 ID에 첨부 된 이메일 또는 사용자 이름과 같은 메타 데이터)에 로그인하고 모바일에서 찾아보고 바구니에 2 개의 항목을 추가하는 경우 바탕 화면에 로그인하면 (새 연결 ID는 동일한 메타 데이터 전자 메일 또는 사용자 ID로 연결될 수 있음) 동일한 사용자에게 알릴 수 있습니다. 그런 다음 해당 사용자에게 메시지를 보내야하는 경우 두 개의 클라이언트 ID로 보내야합니다. 두 개의 클라이언트 ID로 그룹화하거나 두 개의 ID로 보낼 수 있습니다.

클라이언트가 연결 ID를 잃어 버린 경우 연결을 끊어야하며 새 연결에서 새 연결 ID가 있으므로 연결을 생각해야합니다. 7 개의 다른 휴대 전화에서 7 개의 ID로 연결하는 경우 시스템에서이 알림을받는 사람이 모두 의도 된 것임을 알리는 한 모든 사람에게 알림이 전송됩니다. 이 지식을 지속적으로 구현하는 것은 signalR의 일부가 아니므로 직접 구현해야합니다.

관련 문제