2012-06-21 2 views
14

저는 SignalR 허브와 그룹에 관해 상당한 양의 책을 읽었습니다. 특히, 나는 당신이 특정한 그룹에서 연결의 수를 얻을 수 없다는 것을 알아 차렸다.SignalR 그룹 - 클라이언트 또는 서버에서 처리되는 필터링?

클라이언트 또는 서버에서 처리되는 그룹에 대한 필터링이 있습니까? 서버 인 경우 왜 SignalR이 카운트를 노출시킬 수 없습니까? 클라이언트의 경우 특정 클라이언트에게만 메시지를 보내는 방법이 있습니까?

답변

31

특정 연결 그룹에 메시지를 보내면 필터링이 서버에서 발생합니다. 필터링이 없으면 하나의 연결이나 그룹 만 처리합니다.

SignalR은 pub sub를 기반으로하므로 연결 자체가 없습니다. 연결 목록을 추적하려면 연결을 처리하고 이벤트 연결을 끊어 메모리 또는 일부 영구 저장소에 유지해야합니다.

연결 목록을 제공하지 않는 이유는 우리가 저장하는 모든 상태가 노드를 통해 스케일 아웃하는 것을 어렵게하기 때문입니다. 우리가 당신에게 연결 목록을 주었다면, 그것은 실패의 구덩이입니다. 왜냐하면 당신이 다른 웹 노드를 당신의 농장에 추가한다면, 당신은 갑자기 그것을 가로 지르는 상태를 동기화해야하기 때문입니다. ID를 통해 개별 연결이나 그룹을 지정하고 메시지 버스를 사용하여 해당 식별자의 모든 구독자에게 게시 할 수 있습니다.

+3

그래서 10,000 개의 클라이언트가 있고 그 중 5 개의 그룹 만 보내면 다른 9,995는 메시지를받지 않고 무시합니다. 이를 피하기 위해 서버는 누가 어떤 그룹에 있는지 알 필요가 없습니까? –

+10

* 따라서 10,000 개의 클라이언트가 있고 그 중 5 개만있는 그룹에 보내면 다른 9,995는 메시지를받지 않고 무시합니다. * 맞으면 수신하지 않습니다. * 서버가 어떤 그룹에 속해 있는지 알 필요가 없으므로 * 아니요 연결 상태 (그룹과 같은)는 연결 자체와 함께 라운드 트립됩니다. – davidfowl

+0

그룹 멤버십이 클라이언트에 의해 나에게 주어지면, 그것은 안전하고 변경 불가능한가? (예 : Group'Classified's 'Secret') – LamonteCristo