2013-10-28 2 views
1

SignalR을 사용하여 서버의 변경 사항을 알리는 단일 페이지 웹 응용 프로그램을 만들고 있습니다. 나는 SignalR을 처음 사용하고 클라이언트가 어떤 뷰에 따라 특정 이벤트를 듣게 할 수 있는지 이해하려고 노력하고 있습니다. 예를 들어 사용자가 고객 정보를보고있는 경우이 데이터가 변경 될 경우 알림을 받고 싶지만이 데이터를보고 있지 않으면 변경 사항에 대한 알림을받을 필요가 없습니다.SignalR의 허브 연결 끊기

허브에서 정보를 더 이상 알 필요가 없을 때 허브 프록시를 사용하고 가입을 취소하거나 연결을 끊을 수 있다고 생각했습니다. 아래는 내가 이것을 달성하기 위해 시도하는 방법이다 :

var connection = $.hubConnection(); 
var proxy = connection.createHubProxy(hubName); 

// When I want to receive notifications I subscribe to the event 
proxy.on('CustomerChanged', function() { ... }); 

// When I want to stop receiving notifications 
proxy.off('CustomerChanged'); 

이 이벤트 핸들러가 호출되고 중지하지가, 그러나 여전히 처리기가 해제 된 경우에도 브라우저로 전송됩니다 피들러 데이터를 찾고 있습니다.

서버에서 데이터를 보내지 않도록 클라이언트 측에서 알림 수신을 중지 할 수 있습니까?

미리 감사드립니다.

답변

2

그룹을 사용하십시오.

허브에서 사용자를 그룹에 쉽게 추가 할 수 있습니다.

public override Task OnConnected() 
{ 
    Groups.Add(Context.ConnectionId, "foo"); 

    return base.OnConnected(); 
} 

그리고 당신은 쉽게 그룹에서 사용자를 제거 할 수 있습니다 : 여기에 허브의 OnConnected 방법을 통해 예 (이것은 언제 어디서나 수행 할 수 있습니다)가 있습니다. OnDisconnected 방법을 통해 예 (이 언제든지 수행 할 수 있습니다 어디서나) : 사용하기에 따라서

Clients.Group("foo").bar(); 

:

public override Task OnDisconnected() 
{ 
    Groups.Remove(Context.ConnectionId, "foo"); 

    return base.OnDisconnected(); 
} 

가 마지막으로 모든 클라이언트에 데이터를 보낼 수는을 통해 그룹에 가입 예를 들어, 사용자 또는 사용자 집합에게 그룹에 데이터를 추가 할 것을 요청할 때 데이터를 수신 할 그룹에 데이터를 전송할 때; 특정 그룹에 대한 데이터를 더 이상 수신하지 못하면 해당 그룹에서 데이터를 제거하십시오.

희망이 도움이됩니다.