[解決済み】WebSocketが使えるのに、なぜAJAXを使うのか?
質問
私は、大学の最終学年のプロジェクトで、NodeサーバーとWebSocketを利用して、アジャイルプロジェクト管理ツールを作成することにしました。WebSocketsを使用することで、私のアプリケーションが処理できる1秒あたりのリクエスト数が624%増加することがわかりました。
しかし、このプロジェクトを始めてから、セキュリティの抜け穴や、一部のブラウザがデフォルトでWebSocketを無効にしていることを知りました...。
という疑問が湧いてきます。
WebSocketはレイテンシーとリソースのオーバーヘッドを減らすのに素晴らしい仕事をしているように見えるのに、なぜAJAXを使うのですか?
どのように解決するのですか?
WebSocketsはAJAXを置き換えるためのものではなく、厳密にはComet/long-pollの置き換えでもありません(ただし、これが意味を持つケースはたくさんあります)。
WebSocketsの目的は、ブラウザとサーバーの間に、低遅延の双方向全二重長時間接続を提供することです。WebSockets は、HTTP や AJAX を使用しても実際には不可能だった新しいアプリケーション領域をブラウザアプリケーションに開放します(インタラクティブゲーム、動的メディアストリーム、既存のネットワークプロトコルへのブリッジングなど)。
しかし、WebSocketsとAJAX/Cometの間には、確かに目的が重なる部分があります。たとえば、ブラウザがサーバーイベントの通知を受けたい場合(つまり、プッシュ)、Comet技術とWebSocketは確かに両方実行可能なオプションです。アプリケーションが低遅延のプッシュイベントを必要とする場合、これはWebSocketを支持する要因になります。一方、既存のフレームワークや配備された技術(OAuth、RESTful API、プロキシ、ロードバランサー)と共存する必要がある場合は、(今のところ)Comet技術を支持する要因になるでしょう。
WebSocketsが提供する特定の利点を必要としない場合、AJAXやCometのような既存の技術に固執する方がおそらく良いアイデアです。これは、ツール、技術、セキュリティメカニズム、知識ベース(つまり、stackoverflowではWebSocketsよりもHTTP/Ajax/Cometを知っている人がはるかに多い)などの既存の巨大エコシステムと再利用および統合できるようになるためです。
一方、HTTP/Ajax/Cometのレイテンシーと接続の制約の中でうまく動作しない新しいアプリケーションを作成している場合は、WebSocketの使用を検討する必要があります。
また、WebSocketsの欠点として、サーバーとブラウザのサポートが限定的/混在していることを指摘する回答もあります。それを少し拡散させてください。iOS(iPhone、iPad)はまだ古いプロトコル(Hixie)をサポートしていますが、ほとんどのWebSocketsサーバーはHixieとHyBi/の両方をサポートしています。 IETF 6455 バージョンです。他のほとんどのプラットフォームでは、(まだサポートが組み込まれていない場合)WebSockets のサポートを得るには、次のようにします。 web-socket-js (Flashベースのポリフィル)。これはウェブユーザーの大半をカバーしています。また、サーバーのバックエンドにNodeを使っている場合は ソケット.IO これは、フォールバックとして web-socket-js を含み、それさえも利用できない(または無効)場合、与えられたブラウザで利用可能なあらゆるコメット技術を使用することにフォールバックします。
更新情報 : iOS 6 が現在の HyBi/IETF 6455 標準に対応しました。
関連
-
[解決済み] ajaxの応答を待つためにseleniumを取得する方法?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] B "の印刷が "#"の印刷より劇的に遅いのはなぜですか?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] jQueryを使ったAjaxリクエストの中断
-
[解決済み] WebSocketとサーバー送信型イベントの比較/EventSource
-
[解決済み】プリフライトCORSリクエストの導入の動機は何ですか?
-
[解決済み] AJAXアプリのアドレスバーのURLを現状に合わせて変更する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Google Maps APIがAJAX使用時のみ「Uncaught ReferenceError: google is not defined」を投げる。
-
[解決済み] RichFacesのa4j:ajaxタグのevent属性の取りうる値のリスト
-
AjaxにおけるbeforeSend関数の使用について
-
[解決済み】HTTP/2はウェブソケットを時代遅れにするのか?
-
[解決済み】どのような状況で、AJAXのロング/ショートポーリングがHTML5 WebSocketよりも好ましいですか?
-
[解決済み】AJAXレスポンスはクッキーを設定することができますか?
-
[解決済み】Chromeでのリクエストモニタリング
-
[解決済み】jQuery: 同期AJAXリクエストの実行
-
[解決済み] HTTPリクエストがステータスコード0を返すのはどういう意味ですか?
-
[解決済み] Google インスタントはどのように機能するのですか?