問題タブ [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.
signalr - Signalr redis バックプレーンの更新がクライアントにプッシュされない
Web アプリのスタートアップ コードで redis バックプレーンを構成しました。
Web アプリはタイマーでバックグラウンド ジョブを実行し、重要なイベントが発生した場合に起動してクライアントに通知します。バックエンドにクエリを実行した後、バックグラウンド ジョブは単純な HubService ラッパーを呼び出します。このラッパーは IHubContext を依存関係として受け取り、最終的にハブで Client.All.notify メソッドを呼び出してクライアントにプッシュします。
ハブサービス:
HubContext は起動時に登録されます。
これは、バックプレーンがなくても正常に機能しますが、バックプレーンが構成されていると機能しません。呼び出しが行われていることをデバッガーで確認しましたが、クライアントに到達しません。
また、js または signalr.client クライアントを介してクライアント (Web アプリの外部) から signalr ハブを呼び出すと、バックプレーンは宣伝どおりに機能します。
最初にクライアントから呼び出しを開始せずに、Web アプリ自体からハブ コンテキストを直接呼び出しているシナリオに何か欠けているものはありますか?
c# - SignalR バックプレーンがバージョン 1.x でテーブルを作成しない
私のプロジェクトでは、SignalR は正常に動作しています。しかし、Web ファームにロード バランシングが導入されたため、次の記事に従ってバックプレーンと SQL を使用する予定です: http://www.asp.net/signalr/overview/performance/scaleout-with-sql-server。
Microsoft.AspNet.SignalR および Microsoft.AspNet.SignalR.SqlServer に最新のパッケージ (バージョン 2.2.0) を使用し、4.5 .Net フレームワークを選択すると、バックプレーンは正常に動作します。ただし、いくつかの理由で、.Net 4.0 バージョンに固執する必要があり、Owin は使用しません。Microsoft.AspNet.SignalR および Microsoft.AspNet.SignalR.SqlServer のパッケージをバージョン 1.1.4 または 1.2.2 でインストールし、.Net 4.0 で動作させると、SignalR は正常に動作するように見えますが、バックプレーン (SQL を使用) は動作しません。データベースにテーブルが作成されていないため、開始されます。トレースを有効にすると、トレース ファイルはありません。トランスポート関連のトレース ファイルのみが生成されます。global.asax.cs で以下のコードを使用しています。
signalr - SignalR バックプレーンの信頼性はどのくらいですか?
すべてのメッセージがすべてのサブスクライブされたノードに到達するかどうかという質問に関して、SignalR バックプレーンはどの程度信頼できますか? 信頼できるプロトコルを使用しているか、またはメッセージが失われる可能性がありますか?
明らかに、(たとえば) なんらかのネットワークの問題が原因で、1 つのノードがしばらくダウンしている可能性があります。再び到達可能になると、SignalR バックプレーンはすべての中間メッセージを配信します。これは、少なくとも私がdavidfowlから理解していることです:
[...] これはとても重要です!SignalR は信頼できるメッセージングではなく、接続の抽象化です。ロングポーリングのためにメッセージをバッファリングすることはできますが、メッセージが永久に存在することに依存することはできません。保持する必要がある重要なメッセージがある場合は、それらを保持します。
しかし、この文脈での「永遠」とはどのくらいの期間ですか? 定量化/構成できますか?
信頼性の高いシステムを SignalR バックプレーンの上に構築する場合に考慮すべき他のシナリオはありますか?
c# - Signalr SQL スケールアウト: 複数のストリームを使用することの欠点?
SignalR Performanceページでは、以下を読み取ることができます。
このコンテキストでのストリームは、スケールアウト プロバイダーによって使用されるスケール ユニットです。これは、SQL Server が使用されている場合はテーブル、Service Bus が使用されている場合はトピック、Redis が使用されている場合はサブスクリプションです。各ストリームは、順序付けられた読み取りおよび書き込み操作を保証します。単一のストリームはスケールのボトルネックになる可能性があるため、ストリームの数を増やしてそのボトルネックを減らすことができます。複数のストリームが使用されている場合、SignalR は、特定の接続から送信されたメッセージが適切な順序で送信されるように、これらのストリーム間でメッセージを自動的に分散 (シャード) します。
ストリーム数 (つまり、SQL のテーブル) は次のように設定できます。
ただし、TableCount
SQL スケールアウトでは既定で 1 です。これがスケールのボトルネックである場合、なぜデフォルトで 1 なのですか? 50 に設定するとどうなりますか?
ドキュメントには、どの値を指定するかを決定する手がかりはありません。1、3、10、1000 に設定する必要がありますか? 大きな値の長所と短所は何ですか? レイテンシが増加するだけですか?
notifications - SiganlR での同時接続の処理
私は .Net Framework 4.5.2 を使用しています。Web アプリケーションから、Windows フォーム デスクトップ アプリケーションから接続されているユーザーに通知を送信する通知システムの作成を開始します。
調査の結果、適切なソリューションは、接続されたクライアントに送信する前に通知をフィルタリングすることをサポートしているため、signalR を使用していることがわかりました。
しかし、ここでの私の懸念は次のとおりです。WebアプリケーションでHUBクラスを作成したとき、サーバーに接続して通知を受信するクライアントを検出するメソッドOnConnectedを実装し、接続されたユーザーを辞書に収集することを考えました(メモリ) 接続されたユーザーをメモリ変数 (辞書) に設定することは信頼できないため、本番環境では実装できないソリューションであることはわかっています。私の場合、接続ユーザー数は 20,000 人以上になる可能性があり、今後さらに増える可能性があります。接続されているすべてのユーザーを追跡する最善の方法を知る必要があります。同時に、スケーラビリティの問題を発生させずに同時リクエストを処理するための最善の方法を知る必要があります。私はこれに慣れていないので、非常に迅速に決定を下す必要があります。
また、ハブ クラスでオーバーライドできる OnReconnect メソッドの使用方法を知る必要があります。
また、iis が何らかの理由でインターネット アプリケーションを再起動した場合に備えて、接続が失われないように処理する方法も知っておく必要があります。
c# - スケールアウト サーバーでの SignalR 接続状態の保存
SignalR 2.2.0 を使用して、マルチサーバー スケールアウト セットアップでハブ メソッドを実行するクライアントに関する観測結果を検証したいと思います。
SQL Server スケールアウト メッセージ バスを使用して、マルチ サーバー モデルで SignalR を実行しています。
クライアントが接続するOnConnected
と、予想どおり、ハブのメソッドが呼び出されます。Context.ConnectionId
静的辞書に保存します。
クライアントが後でハブのメソッドを呼び出すと、最初に OnConnected メソッドを実行したサーバーではなく、ファーム内の別のサーバーがハブ メソッドを実行しているように見えます。ハブ メソッドのContext.ConnectionId
値は正しいですが、辞書に存在しません。
これは、スケール アウト モデルで予期される動作ですか? もしそうなら、すべてのサーバー上のすべてのハブが ConnectionId に基づいて接続状態を検索できるように、接続状態データをデータベースに保存する必要があると思います。
c# - SignalR + RabbitMQ バックプレーン: SignalR クライアントは同じメッセージを繰り返し受信します
https://github.com/mdevilliers/SignalR.RabbitMq/issues/43
これを機能させるのに本当に苦労しています。誰かがこれを見て、セットアップに問題があるかどうかを確認できますか?
これが私のテストです:
同じ RabbitMqScaleoutConfiguration に構成された 2 つの自己ホスト型サーバーを起動します
サーバ:
加入者:
出版社:
これは、たとえば12回目の実行ごとに機能します。通常、次のようになります。
...このまま永遠に続く