問題タブ [signalr-backplane]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Signalr SQL バックプレーンにより、待機操作のタイムアウト例外が発生する
最近、SQL サーバーを使用してバックプレーンを実装しました。バックプレーンを作成したサーバーには、他のデータベースも含まれています。これらの他のデータベースは、異なるサーバー上にある異なるアプリケーションによってアクセスされます。ストレス テストのために、30 秒ごとにサーバーにメッセージを送信する単純なシグナル クライアント プログラムを実装しました。ロード バランサによって処理される 2 つのサーバーがあります。クライアントの数が少ない場合、バックプレーンは完全に機能します。
問題は、クライアント数が多い場合です。(50以上に近い)。次の例外は、別のデータベースにデータベース サーバーを使用しようとする他のアプリケーションによってスローされます。
この例外により、データベースにアクセスできないため、他のすべてのアプリケーションが機能しなくなります。バックプレーンを無効にすると、問題はすぐに修正されます。(2 つの signalr サーバーを停止します)。これは、多数のユーザーがバックプレーンを使用する場合に予想される動作ですか、それともバックプレーンの問題ですか?
PS - これらの例外をスローするマシンでは、w3wp.exe プロセスに 3000 を超えるスレッドが割り当てられていることがわかりました。彼らは手術で立ち往生しているようです。
c# - SignalR - ユーザーへの接続のマッピング
Redis
バックプレーンとして使用していますが、SQL を使用してユーザーを接続にマップしています。これは I/O に負担をかけています。ハブを介してメッセージを送信するたびに、次のようにします。
これはどこですかGetConnections
:
また、非アクティブな接続を定期的に削除するために、大量の I/O を実行しています。
SignalR はどうにかしてユーザー名を推測し (たとえば からUser.Identity.Name
)、マッピングと接続の有効期限を自動的に処理できるので、SignalR 実装からこの SQL 依存関係を一掃できますか?