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

Использование групп.

В вашем концентраторе вы можете легко добавить пользователя в группу. Вот пример с помощью метода OnConnected на ступице (это может быть сделано в любое время, в любом месте):

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

    return base.OnConnected(); 
} 

И тогда вы можете удалить пользователя из группы легко. Пример через OnDisconnected методы (это может быть сделано в любое время, в любом месте):

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

    return base.OnDisconnected(); 
} 

Наконец вы можете отправить данные для всех клиентов подписался на группы с помощью:

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

Поэтому для вашего использования Если вы хотите, чтобы пользователь или группа пользователей были уведомлены, добавьте их в группу, таким образом, когда данные будут отправлены в группу, они получат ее; когда они больше не будут получать данные для конкретной группы, удалите их из нее.

Надеюсь, это поможет!

Смежные вопросы