1

SignalR を使用してサーバー上の変更を通知する単一ページ Web アプリケーションを作成しています。私は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');

これにより、イベントハンドラーの呼び出しが停止しますが、フィドラーを見ると、ハンドラーがオフになっていても、データは引き続きブラウザーに送信されます。

サーバーがデータを送信しないように、クライアント側で通知のリッスンを停止する方法はありますか?

前もって感謝します

4

1 に答える 1

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();

したがって、ユースケースでは、ユーザーまたはユーザーのセットに通知する必要がある場合は、それらをグループに追加します。そのようにして、データがグループに送信されると、データが受信されます。特定のグループのデータを受信する必要がなくなった場合は、そのグループから削除します。

お役に立てれば!

于 2013-10-28T07:17:50.620 に答える