私は言われたことにもっと高い視点を追加するだけです、そしてそれはSSEがAJAXの場合の一定のポーリングとは対照的にパブリッシュ/サブスクライブモデルであるということです。
一般に、両方の方法(ポーリングとパブリッシュ/サブスクライブ)は、クライアントで最新の状態を維持する方法の問題を解決しようとしています。
1)ポーリングモデル
簡単です。クライアント(ブラウザー)は最初に初期状態(ページ)を取得し、それを更新するには、定期的に状態(ページまたはその一部)を要求し、結果を現在の状態に処理する必要があります(ページ全体を更新するか、ページをインテリジェントにレンダリングします)。一部はAJAXの場合)。
当然、1つの欠点は、サーバーの状態で何も起こらない場合、リソース(CPU、ネットワークなど)が不必要に使用されることです。もう1つは、状態が変化した場合でも、クライアントは次のポーリング期間でのみ取得し、できるだけ早く取得しないことです。多くの場合、2つのことの間の適切な期間の妥協点を評価する必要があります。
ポーリングのもう1つの例は、スレッド化のスピンウェイトです。
2)パブリッシュ/サブスクライブモデル
次のように機能します。
- (クライアントは最初に要求し、いくつかの初期状態を示します)
- クライアントはサーバーにサブスクライブします(おそらくイベントソースなどのコンテキストで1つの要求を送信します)
- サーバーは、クライアントへの参照をそのクライアント参照リポジトリにマークします
- 状態が更新された場合、サーバーは、保持しているクライアントへの参照に基づいてクライアントに通知を送信します。つまり、リクエストへの応答ではなく、サーバーによって開始されたメッセージです。
- 優れたクライアントは、通知に関心がなくなったときに登録を解除します
別の例として、これはSSE、または待機可能なイベントのスレッド内です。前述のように、自然な欠点は、サーバーがサブスクライブされたすべてのクライアントについて認識している必要があることです。これは、実装によっては問題になる可能性があります。