2

並行辞書にすべてのユーザー接続を記述して保存しているアプリケーションでSignalrを使用しています

ConcurrentDictionary<string, User> _users = new ConcurrentDictionary<string, User>();

例: https ://github.com/SignalR/SignalR/blob/master/samples/SignalR.Hosting.AspNet.Samples/Hubs/ShapeShare/ShapeShare.cs

ハブにIDisconnectインターフェイスを実装しましたが、ユーザーが切断すると辞書から削除されます

切断方法は本当にどれほど信頼できるのだろうか?ユーザーが切断できるさまざまな方法をすべてキャプチャしていますか?辞書を無期限に成長させたくない

定期的に辞書を調べて、最近アクティビティを行ったことがないユーザーを削除するタイマーを用意することを考えていました。

これは必要ですか?切断方法に頼ることはできますか?

4

2 に答える 2

1

起動しない場合はバグであり、GitHubのSignalRプロジェクトに問題を報告する必要があります。現時点での切断に関する未解決の問題のリストは次のとおりです。

その差分に注意してください。トランスポートには違いがあります。切断検出ロジックなど、ユーザーが使用しているトランスポートに応じて、diffが表示されます。切断が発生するときのパターンですが、最終的にはすべてのトランスポートに対して発生する必要があります。

于 2012-08-09T16:41:32.413 に答える
1

https://github.com/SignalR/SignalR/wiki/Configure-SignalRを確認してください。次の設定があります。

切断タイムアウトキープアライブとHeatbeat間隔

これらはすべて、辞書の保守に役立てるために適用できます。

私の経験では、正常な切断はsignalRで完全に機能するようです(win-appsでまだ問題があります)。数分で接続が正常に切断されない場合、接続はタイムアウトになり、切断メソッドが起動して、Drewが言ったように辞書から削除します。

すべてのクライアントにメッセージを送信し、返された接続IDをログに記録してから、古いエントリを削除するメソッドを作成することもできますが、実際には、切断メソッドは機能します。実際には、ハートビート間隔を実装するのは、本当に接続を非常に注意深く監視する必要があります。

于 2012-08-14T10:36:47.253 に答える