2016-11-13 15 views
3

この質問は本当にこの質問と似ています:What is the difference between web sockets, long polling, server-sent events and forever frame?Forever-frameイベントとサーバー送信イベントの違いは何ですか?

しかし、この質問の答えは、SSEと永遠フレームの違いは言及していません。
それらについて簡単に説明しましょう。

SSEに関しては、システムは実際にはCometと似ていますが、Cometと異なる点はデータの送信後に接続を切断していません。 したがって、サーバーからクライアントへの接続は長生きであり、クライアントはデータ全体の一連の断片を受信します。

一方、永遠のフレームは私と非常に似ているようです。永遠のフレームでは、最初にクライアントはiframeタグを含むページを受け取り、隠されたiframeの内部で長寿命の接続を確立します。そして、クライアントはサーバーからチャンクされたデータを受け取り、クライアントが既に持っている最初の文書のいくつかの関数を使ってDOMを操作します。

Forever-frameはiframeタグを使用していますが、SSEは使用できず、さらに多くの方法でSSEを実現できます。 私はそうですか?

答えて

2

私は前にその名前でフォーエバーフレームを聞いたことがありませんでした! (「iframe」セクションのHTML5 SSEを使用したデータプッシュアプ​​リの第7章で説明しています)。

ロングポーリング:(XMLHttpRequest、すなわちajaxを使用して)リクエストを行い、データがサーバー上で準備完了になるまで開いたままにします。その後、ソケットが閉じます。再接続してデータの次のビットを取得します。

XHRポーリング:(XMLHttpRequest2、つまりajaxを使用して)リクエストを行いますが、readyState == 3信号を待ち受けます。バックエンドサーバーは接続を開いたままにしておく必要があり、クライアントはreadyState == 3を待機する必要があります。 (そのブラウザはreadyStateのの== 3メッセージを配信しませんが、readyStateのの== 4に直進んので、IE9とそれ以前では動作しません)

のiframe:バックエンドプロセスに非表示のiframeを開きます。定期的にiframeのソースコードを見て、新しいものがあるかどうか確認してください。基本的に、XHRのように動作しますHTML5の標準:(技術的にそれはすべてのブラウザで動作しますが、IE8とIE9は更新が有用であるため、十分に低いレイテンシで私(2013)の試験で唯一のものだった。)

SSEポーリング(少なくともFirefoxとChromeはXMLHttpRequest2の上に直接実装します)が、複雑な詳細は隠されています。また、ソケットがダウンした場合は自動再接続が追加され、それ以外にもいくつかの高度な機能が追加されています。

上記の本の第7章の最後に、すべてのテクニックをあらゆるブラウザで動作させるためのコードを示します。優先順位は次のとおりです。

  • SSE利用可能
  • 他のXHR場合は利用でき
  • 他のiframe場合IE8またはIE9他
  • longpoll

一つの他の違いがある場合:XHRはiframe技術はメッセージ履歴全体をメモリに保存しています。そのため、ソケットを長時間開いたままにしたり、大きなメッセージをたくさん送信したりすると、SSEで発生しないメモリの問題が発生する可能性があります。

エグゼクティブサマリー:IE8/IE9をまだ十分に使用していない限り、「永遠のフレーム」について心配する必要はありません。

+0

これらの技術の概要をありがとうございます。しかし、いくつかの点でまだ明確ではありません。 1:ロングポーリングとXHRポーリングの違いはわかりません。私は「XHRポーリング」という言葉を尋ねましたが、それについての良い情報は見つかりませんでした。あなたが言及したように、違いは、ロングポーリングはXMLHttpRequest1を使用します。ここでXMLポーリングはXMLHttpRequest2ですか? 2:XHRポーリングでは、どちら側から送信されたreadyState信号ですか?サーバー側から?またはクライアント? 3:「自動再接続」とはどういう意味ですか?それは、データを送信した後、接続が一度中断するのでしょうか? –

+0

@ KazuyaTomita私の本を買うことを提案するにはあまりにも賢明ですか?これらの話題を徹底的にカバーするには十分なスペースがあります:-) 通常のロングポーリングと「xhr」とは、readyState == 4、後者はreadyState == 3を使用します。 readyStateは、クライアント側のJavaScript XMLHttpRequest2 APIの一部です。 –

+0

したがって、あなたの追加のコメントに従ってXMLHttpRequest2を使用するため、長いポーリングとXHRポーリングの説明についての説明は間違っていますか?それが大丈夫なら質問3について簡単に説明してください。 –

関連する問題