web-dev-qa-db-ja.com

SignalR通信のベストプラクティス

私はオンラインでの購入を含むプロジェクトに取り組んでいます。私のWeb APIはC#で、クライアントはREACT(JavaScript)です。サーバーとクライアントはSignalRで接続されています。注文が変更されたときに、注文の詳細を監視しているすべてのクライアントに、ページを更新するよう警告が表示されます。

私の質問は、これを行うためのベストプラクティスはどれですか?注文のIDを含む警告をすべてのクライアントに送信する方が良いですか?クライアントを監視しているページをサーバーに保存し、特定の注文を監視しているクライアントにのみ警告を送信した後の方が良いですか?

実稼働環境では、多くのクライアントと多数の同時注文があり(私は:Dを望みます)、どれがベストプラクティスになるかわかりません。

1

メッセージに関心のあるクライアントにのみメッセージを配信することが望ましいことは明らかです。他のクライアントの1つについては、おそらくすべきではない彼らが関与していない注文について知っています。他の要因は、クライアントベースが増加するにつれて、メッセージの量が持続不可能なペースで増加することです。

これらの仮定の下で例を考えてみましょう:

  • 顧客は1日あたり平均100件の注文を出します
  • 顧客あたりの注文を見ているクライアントは約10人いる
  • 各注文は、警告する必要がある5つの状態変化を通過します

1人の顧客の場合、これは(100 * 10 * 5)= 1日に送信する必要がある5,000メッセージです。ここで、100人の顧客がいるとします。メッセージのみを必要とするクライアントに送信すると、1日あたり500,000件のメッセージになります。すべてのクライアントにすべてのメッセージを送信する場合を考えてみましょう:(100注文* 5更新* 100顧客)= 50,000に送信する必要がある更新(100顧客* 10クライアント)= 10,000クライアント。これは5億のメッセージ、つまりメッセージが100,000%増加したことになります。この状況での成長は二次的です。新しい顧客が増えるごとに、サポートのコストが高くなるだけでなく、既存のすべての顧客をサポートするコストも増加します。

1
JimmyJames