2013-03-18 2 views
2

여러 곳을 살펴 보았지만 그룹 사용 방법에 대한 명확한 지침을 찾을 수 없습니다. 나는 필터링을위한 그룹을 사용하고있다. (클라이언트의 서브 세트로 메시지를 전달하는 것).SignalR : 연결이 설정된 경우 서버가 그룹에 올바르게 가입하는 방법

서버 쪽의 그룹에 클라이언트 인 OnConnected 이벤트에 참여하고 싶습니다. 클라이언트는 자신이 속한 그룹을 알 필요가 없습니다.

질문 :

  1. 가 나는 또한 OnReconnected 이벤트를 오버라이드 (override) 할 필요가?

  2. GroupManager.Add에서 반환 된 작업을 OnConnected 이벤트 결과로 반환해야합니까? 여러 그룹에 가입하고 싶다면 아마도 결합 된 작업을 만들어야 할 것입니다. 권리?

3 왜 서버가 AddToGroup 명령은 클라이언트 전송 (GroupManager.Add 구현을 참조)는 무엇입니까? 이 문제를 해결할 방법이 있습니까? 어쩌면 Client.AllExcept(...)을 사용하고 수동으로 서버의 그룹 구성원을 처리하면 (yuck!)?

나는 SignalR의 최신 버전 (1.0.0.1)

답변

3
  1. 당신은 OnReconnected를 오버라이드 (override) 할 필요가 없습니다를 사용하고 있습니다. 클라이언트가 다시 연결되면 이전 그룹의 모든 그룹에 다시 참여하게됩니다.
  2. 그룹 가입 작업을 반환하지 않으려면 OnConnected 내에서 해당 그룹으로 보내려고하면 필요하지 않습니다. 작업이 완료 될 때까지 대기합니다.
  3. # 2 (클라이언트가 어떤 그룹에 있는지 알아야하기 때문에) 필요한 이유 중 하나를 해결하지 않으려 고합니다. 다시 연결하기 위해 그룹을 인증하려면 항상 허브 파이프 라인 모듈을 만들고 BuildRejoiningGroups 함수를 재정 의하여 자신 만의 검증을 수행 할 수 있습니다. 댓글

    코멘트 1-

응답 : 예
코멘트 2 : (이것은 의도적으로 설계된 동작입니다), 그렇지 않으면 아무것도 완료되지 않습니다 작업을 반환해야합니다. 무엇을 반환해야할지 모른다면 항상 base.OnConnected()를 반환 할 수 있습니다.

GroupManager.Add를 호출하면 연결이 원하는 그룹에있는 경우를 나타내는 작업이 반환됩니다. 일단 그룹에 가입하면 클라이언트는 토큰을 통해 새 그룹에서 현재 알림을받습니다. 연결이 끊어져서 다시 연결해야하는 경우 토큰을 사용하면 클라이언트가 그룹에 다시 가입 할 수 있습니다.

+0

Ad3의 이유 - 클라이언트는 자신이 속한 그룹이 클라이언트가 자동으로 재 연결시 그룹 구성원을 보내는 것임을 알아야합니다. – matra

+0

Ad2) : OnConnect에서 작업을 반환하지 않으면 클라이언트가 메시지를받지 못합니다 (서버 측에서도 10 초 지연). [이 질문] (http://stackoverflow.com/questions/14803682/signalr-groups-not-invoked)도 참조하십시오. 'GroupManager.Add'가 반환 한 작업을 누가'OnConnected'에서 반환하지 않으면 누가 시작합니까? 'MessageBus.ScheduleTopic' /'MessageBroker.Schedule'? – matra

+0

편집 내 대답 –

관련 문제