2016-05-31 3 views
1

私のSignalRアプリケーションに2つのハブがあるとします。 私はローカルのキャッシュ辞書にconnectionsIds - > userIdsをマッピングしています。SignalR:ハブのOnDissconnectイベントは、特定のハブに対してのみ呼び出せますか?

現在のロジックはそうのようなものです:付き

OnConnected - >(それが存在しない場合)の辞書に新しい「connectionIdはUSERIDする」エントリを追加します。 OnDisconnectedで

- >辞書からエントリを「connectionIdはUSERIDする」ことを削除(存在する場合)

はHUB2は、接続を維持する一方HUB1が切断されます任意のシナリオがありますか?

もしそうなら、Hub2がまだ接続されていても辞書からエントリを削除するので、現在のロジックに欠陥があります。各ハブの2つの辞書を処理する必要があります。

P.S.私は、接続マッピングを処理するためのSignalRのドキュメントを見てきました。そして、それは常にハブごとに1つの辞書を使用しているようです。本当に必要かどうかを知りたい

+1

こんにちはオフィール。単なる提案では、このマッピングを維持するためにシングルユーザーグループを使用することができます。実装が簡単で、辞書を維持することに重点を置く必要はありません。 [this](http://stackoverflow.com/questions/37455608/handling-concurrent-connections-in-siganlr/37458129#37458129) –

+0

非常にエレガントなソリューション!私はその道を行くと思う。ありがとう – Ofir

答えて

1

ドキュメントによると、Signalrは複数のハブに対して1つの接続を共有します。したがって、OnDisconnectへの呼び出しを受け取った場合、すべてのハブを切断する必要があります。

SignalR2.0が更新されて、パフォーマンスが低下することなく、1つの記号 接続を介して複数のハブを処理できるようになりました。

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#multiplehubs

+0

あなたが正しいです、私はHubDispatcherクラスのコードを見てきました、関数はすべてのハブを取得し、接続されているすべてのハブで切断イベントを実行します。 – Ofir

関連する問題