サーバー側の観点から、SSE の代わりに Ajax Polling を使用する方が良い場合に、何らかの標準的な制限があるかどうかに興味があります。
- 毎秒 1 リクエスト: SSE の方が優れていると確信しています
- 1 分あたり 1 リクエスト: Ajax の方が優れていると確信しています
しかし、5 秒ごとに 1 つのリクエストはどうでしょうか? Ajax または SSE の制限頻度はどこで計算できますか?
サーバー側の観点から、SSE の代わりに Ajax Polling を使用する方が良い場合に、何らかの標準的な制限があるかどうかに興味があります。
しかし、5 秒ごとに 1 つのリクエストはどうでしょうか? Ajax または SSE の制限頻度はどこで計算できますか?
毎分 1 リクエストが常に Ajax にとって良いというわけではないので、その仮定には最初から欠陥があります。あらゆる種類の頻繁なポーリングは、ほとんどの場合、コストのかかる選択です。コメントでの以前の会話からのようです開いている TCP ソケット (SSE 接続または webSocket 接続のいずれか) がサーバーのパフォーマンスに何らかの影響を与えるという信念から始める別の質問の。アイドル状態の TCP 接続は、CPU をまったく使用しません (おそらく、しばらくの間、キープアライブが送信されることがありますが、それ以外は、アイドル状態のソケットは CPU を使用しません)。ソケット記述子を処理するために多少のサーバー メモリを使用しますが、高度に調整されたサーバーでは、一度に 1,000,000 のオープン ソケットを持つことができます。したがって、CPU 使用率は、確立されている接続の数と、接続が確立されるたびにサーバーに何を要求しているかに関係し、開いている (そしてほとんどがアイドル状態の) 接続の数よりも多くなります。
すべての http 接続は TCP ソケット (クライアント/サーバー間のラウンドトリップ) を作成し、次に http 要求を送信し、次に http 応答を取得し、ソケットを閉じる必要があることを覚えておいてください。これは、1 分ごとに大量のデータの往復を行うことです。接続が https の場合、暗号化レイヤーとエンドポイント認証のために、接続を確立するための作業と往復がさらに多くなります。したがって、1 つの SSE 接続を作成し、クライアントがその接続を介してサーバーからストリーミングされるデータをリッスンするだけの場合、何十万ものクライアントに対して毎分すべてを行うことは、リソースと帯域幅の膨大な浪費のように思えます。
別の質問に関する以前のコメント交換で述べたように、これらのタイプの質問は、抽象的には実際には答えられません. クライアントとサーバーの両方の特定の要件と、配信されるデータとクライアントでのデータの緊急性についての特定の理解が必要です。したがって、特定のポーリング間隔と特定のスケールを使用して、計算を開始したりハーネスをテストしたりします。どちらがより望ましい方法であるかを評価します。変数が多すぎて、純粋に仮説的な答えを導き出すことはできません。シナリオを定義してから、その特定のシナリオのさまざまな実装を分析する必要があります。
1 秒あたりのリクエスト数は、考えられる多くの変数の 1 つにすぎません。たとえば、ほとんどの場合、実際に新しいことは何もポーリングしない場合、SSE の場合にはさらに多くの利点が得られます。これは、何もする必要がないためです (サーバーの負荷がゼロで、サーバーに使用される少量のメモリを除いて)。ほとんどの場合、開いているソケット) に対して、何もすることがない場合でも、ポーリングは継続的な負荷を作成します。
サーバー プッシュ (SSE または webSocket を使用して実装する場合) の最大の利点は、特定のクライアントに送信する関連データが実際に存在する場合にのみ、サーバーがクライアントに対して何かを行う必要があることです。それ以外の時間は、ソケットはアイドル状態のままです (おそらく、長い間隔でキープアライブを送信することがあります)。
ポーリングの最大の欠点は、クライアントがサーバーをポーリングしていることが何度もあり、サーバーはリソースを消費してポーリング要求を処理し、そのクライアントに新しいものがないことを通知しなければならないことです。
Ajax または SSE の制限頻度はどこで計算できますか?
それはかなり複雑なプロセスです。特定のシナリオでは、多くの変数を定義する必要があります。リクエスト/秒ほど単純ではありません。次に、何を測定または評価しようとしているのか、またどの程度の規模で行うのかを決定する必要があります。あなたが言及しているのは「サーバーのパフォーマンス」だけですが、それは完全に定義する必要があり、CPU使用率やメモリ使用率などのさまざまな要因を、測定または計算するものに重み付けする必要があります. 次に、計算で明らかな答えが得られない場合、または決定が非常に重要で実際のメトリックで計算を検証したい場合は、いくつかのテスト ハーネスを実行する必要さえあるかもしれません。
「xリクエスト/分を超える場合は、SSEの代わりにポーリングを使用する必要があります」などの答えを探しているようですが、それほど単純な答えはないと思います。リクエスト/分またはリクエスト/秒よりもはるかに多くのことに依存します。
「ポーリング」は、すべてのパーティでオーバーヘッドが発生します。回避できる場合は、投票しないでください。
SSE がオプションである場合、それは良い選択かもしれません。"場合によります"。
Q: アプリで処理する必要がある "イベント" の種類 (ある場合) は?