0

SignalR のドキュメントによると、スケールアウト/バックプレーンは、サーバー ブロードキャスト タイプの負荷/実装の場合にうまく機能します。ただし、純粋なサーバーブロードキャストの場合、重複したメッセージがクライアントに送信されるとは思えません。次のシナリオを検討してください。

  1. Web ファームのロード バランサーの背後にある 2 つの Web サーバーに、ハブの 2 つのインスタンスがあります。
  2. 各サーバーのハブは、データベース ポーリング用のタイマーを実装して更新を取得し、トピック ID でグループ化されたグループでクライアントにブロードキャストします。
  3. グループ/トピックのクライアントは、2 つのサーバー間で分割される場合があります。
  4. 両方のハブ インスタンスが、データベースから同じ更新または重複する更新をフェッチします。
  5. 各ハブがバックプレーンを介してクライアントに更新を送信すると、クライアントに重複した更新が送信されることはありませんか?

提案してください。

4

1 に答える 1

0

問題は SignalR ではなく、ハブ内に存在するデータベース ポーリングにあります。バックプレーンはブロードキャスト レプリケーションを正しく処理しますが、ハブに別の役割を追加すると話は別です。これは、SignalR ではなく、メッセージを複製している部分です。これは、N 個のポーラーがすべてのサーバー インスタンスでブロードキャストを実行しているためです。

たとえば、そのロジックをハブから別のものに削除し、サーバー アプリケーションの 1 つのインスタンスだけがこの新しい部分を使用して、ポーリングによってメッセージを生成できるようにし、構成の一部を使用してどれを決定するかを決定できます。 . この方法では、そこからのみメッセージを送信し、SignalR のバックプレーンがレプリケーションを処理します。これは非常に基本的な提案であり、別の方法で実行することもできますが、重要な点は、ポーラーをレプリケートしないでください。これは SignalR とは直接関係ありません。

また、ポーリングがシナリオに対処するための最良の方法ではない可能性があることも事実ですが、IMO は別の質問に答えています。

于 2015-04-05T17:06:27.310 に答える