7

フォームの送信などに PHP で AJAX を少し使用しましたが、最近は Websocket を調べ始めました。このチュートリアルに従って、基本を理解しました。私が収集したものから、WebSocket は接続を開いたままにしますが、AJAX はリクエストを開いて閉じます。

私の質問は、フォームまたは auto_complete のような単純なタスクを送信するだけの場合 (とにかく jQuery プラグインがあります)、Websockets は AJAX よりも利点がありますか? チュートリアルは最高ではないかもしれませんが、単純な AJAX 呼び出し (またはそれをバンドルする jQuery の使用) よりも (少なくとも PHP で) websockets を機能させるには、はるかに多くのコードが含まれているようです。少し速いといくつかの場所で読んだことがありますが、大量のリクエストを受け取っていないものに取り組んでいる場合、本当に違いがありますか? 間違っていたら訂正してください。ただし、すべてのブラウザーが WebSocket をサポートしているわけではありませんよね?

4

3 に答える 3

20

Websocket には 2 つの利点があります。

  1. オーバーヘッドがはるかに少ないため、ネットワーク パフォーマンスが向上します。

  2. クライアントが明示的に要求していないデータをサーバーが送信できるようにします。

2 つ目は、最も重要な利点です。

AJAX では、サーバーが送信するものはすべて、クライアントによる以前の要求に対する応答でなければならず、すべての要求は 1 回しか応答できません。しかし、多くのアプリケーション、特にマルチユーザー アプリケーションでは、サーバーでイベントが発生し、これらのイベントをクライアントにすぐにプッシュする必要があります。AJAX には、報告するものがあるまでリクエストへの応答を遅らせる (ロングポーリング) などの回避策がありますが、これらは非常に汚いものです。そのため、Websocket があります。Websocket 接続を使用すると、サーバーは、クライアントからの要求を待たずに、必要なときに必要な頻度でクライアントにメッセージを送信できます。

しかし、残念ながら WebSocket には欠点もあります。

  1. それらは Web 開発フレームワークによって十分にサポートされていません (まだ!)
  2. すべての Web ブラウザーがサポートしているわけではありません (ただし、ほとんどのデスクトップ ブラウザーは既にサポートしています) 。
  3. 多くのプロキシとリバース プロキシは Websocket トラフィックを中継できません (まだ!)
于 2012-12-07T14:33:31.047 に答える
9

実際、AJAX と websocket は 2 つの異なるカテゴリです。AJAX は概念であり、技術です。AJAX を使用すると、(頭字語が表すように) 非同期要求を実行できるため、ブラウザーはページ全体を再読み込み/更新する必要がありません。これは、フォーム入力のチェックなど、さまざまなことに適しています。Websockets は、送信後に接続が閉じられない限り、技術的には http とまったく同じプロトコルです。これは、Web サーバーがクライアントに接続する必要がある場合に適しています (http はそれを行うことができません)。たとえば、プッシュ サービス (ユーザーが更新しない場合でもユーザー インターフェイスを更新する必要があるチャットまたはメール クライアント) などです。ページ、またはゲーム)。また、すべてを最初に 1 回実行するだけで済むため、http のオーバーヘッドが削減されます。

したがって、たとえ重複していても、それらは異なる目的のために使用されます。自動補完については、パフォーマンスに大きな違いはないと思います。そして、それはアクション/リアクションであるため、ユーザーはリクエストを引き起こす可能性のあるものを入力または送信し、サーバーは応答します。

于 2012-12-07T14:54:01.580 に答える
1

Websockets は強力な技術であり、あなたが言及した限られたユースケースに確実に対応できますが、古いブラウザーやネットワーク仲介者との互換性の問題が発生する可能性があります. 実際、Websockets がサポートされていない場合に備えて、HTTP フォールバックを推奨する人もいます。

たとえば、全二重双方向通信など、Websocket を必要とする要件がない限り、既存の AJAX ベースのソリューションを使用した方がよい場合があります。

ユーザー インターフェイスに通知をプッシュする必要がある場合は、Websocket を使用することをお勧めしますが、文字通りフォームの送信とオートコンプリートを探している場合は、これらの問題は Ajax を使用して既に解決されています。

于 2012-12-07T14:36:58.580 に答える