HTTPポーリング、ロングポーリング、HTTPストリーミング、WebSocketについての私の理解 質問する

HTTPポーリング、ロングポーリング、HTTPストリーミング、WebSocketについての私の理解 質問する

私は、質問のタイトルにあるキーワードに関する SO や Web 上の投稿を数多く読み、そこから多くのことを学びました。私が読んだ質問の中には、特定の実装上の課題に関するものもあれば、一般的な概念に焦点を当てているものもあります。私は、すべての概念と、なぜテクノロジー X がテクノロジー Y よりも発明されたのかなどの理由を理解していることを確認したいだけです。それでは、次のようになります。

HTTP ポーリング:基本的には XmlHttpRequest を使用した AJAX です。

HTTP ロングポーリング:AJAX ですが、サーバーは更新がない限り応答を保持し、サーバーが更新を取得するとすぐにそれを送信し、クライアントは別のリクエストを送信できます。欠点は、追加のヘッダー データを送受信する必要があるため、追加のオーバーヘッドが発生することです。

HTTP ストリーミング:ロング ポーリングに似ていますが、サーバーは「転送エンコーディング: チャンク」というヘッダーで応答するため、サーバーがデータを送信するたびに新しい要求を開始する必要がありません (したがって、追加のヘッダー オーバーヘッドが節約されます)。ここでの欠点は、サーバーによって送信された複数のチャンクを区別するために、データの構造を「理解」して把握する必要があることです。

Java アプレット、Flash、Silverlight:これらは TCP/IP 経由でソケット サーバーに接続する機能を提供しますが、プラグインであるため、開発者はこれらに依存したくありません。

Webソケット:これらは、上記のメソッドの欠点を次のように解決しようとする新しい API です。

  • WebSocket が Java アプレット、Flash、Silverlight などのプラグインよりも優れている唯一の点は、WebSocket がブラウザにネイティブに組み込まれており、プラグインに依存しないことです。
  • WebSocket が HTTP ストリーミングより優れている唯一の点は、受信したデータを「理解」して解析する手間がかからないことです。
  • WebSocket が Long Polling より優れている唯一の点は、余分なヘッダー サイズが不要になり、リクエストに対するソケット接続の開閉が不要になることです。

私が見逃している重要な違いは他にもありますか? すでに SO にある多くの質問を再度質問したり、1 つの質問にまとめたりしている場合は申し訳ありませんが、私はこれらの概念に関して SO と Web 上にあるすべての情報を完全に理解したいだけです。

ありがとう!

ベストアンサー1

あなたが特定した違い以外にも、多くの違いがあります。

デュプレックス/方向性:

  • 一方向: HTTP ポーリング、ロング ポーリング、ストリーミング。
  • 双方向: WebSocket、プラグインネットワーク

レイテンシの増加順(おおよそ):

  • Webソケット
  • プラグインネットワーク
  • HTTPストリーミング
  • HTTP ロングポーリング
  • HTTPポーリング

CORS (クロスオリジンサポート):

  • WebSocket: はい
  • プラグインのネットワーク: ポリシー要求による Flash (他については不明)
  • HTTP * (最近サポートされたもの)

ネイティブ バイナリ データ (型付き配列、BLOB):

  • WebSocket: はい
  • プラグイン ネットワーク: Flash では使用不可 (ExternalInterface 全体で URL エンコードが必要)
  • HTTP *: バイナリ型のサポートを有効にする最近の提案

効率が低下する帯域幅:

  • プラグインネットワーク: フラッシュソケットは、最初のポリシー要求を除いて生です
  • WebSocket: 接続設定ハンドシェイクとフレームあたり数バイト
  • HTTP ストリーミング (サーバー接続の再利用)
  • HTTPロングポーリング: メッセージごとに接続
  • HTTP ポーリング: メッセージごとに接続 + データ メッセージなし

モバイルデバイスのサポート:

  • WebSocket: iOS 4.2以上。Androidの一部はFlashエミュレーションまたはAndroid 向け FirefoxまたはAndroid 向け Google Chromeどちらもネイティブの WebSocket サポートを提供します。
  • プラグインネットワーク: Android では一部。iOS ではなし
  • HTTP *: ほとんどの場合はい

Javascript の使用の複雑さ (最も単純なものから最も複雑なものまで)。確かに複雑さの測定は多少主観的です。

  • Webソケット
  • HTTP ポーリング
  • プラグインネットワーク
  • HTTP ロング ポーリング、ストリーミング

また、HTTPストリーミングを標準化するためのW3C提案として、サーバー送信イベント現時点ではまだ開発の初期段階にあり、WebSocket と同等のシンプルさを備えた標準の JavaScript API を提供するように設計されています。

おすすめ記事