HTTP と WebSocket はどちらもクライアントとサーバーの通信で使用される通信プロトコルです。
HTTPプロトコル: HTTP は単方向であり、クライアントがリクエストを送信し、サーバーが応答を送信します。ユーザーがサーバーにリクエストを送信する場合、このリクエストは HTTP または HTTPS の形式で行われる例を考えてみましょう。リクエストを受信した後、サーバーはレスポンスをクライアントに送信します。各リクエストは対応するレスポンスに関連付けられ、レスポンスを送信した後、接続が閉じられると、各 HTTP または HTTPS リクエストは毎回サーバーへの新しい接続を確立し、応答を取得した後、接続は自動的に終了します。
HTTP は、接続指向プロトコルである TCP 上で動作するステートレス プロトコルで、3 ウェイ ハンドシェイク方式を使用してデータ パケット転送の配信を保証し、失われたパケットを再送信します。
HTTP は、TCP や SCTP など、信頼性の高い接続指向のプロトコル上で実行できます。クライアントが HTTP リクエストをサーバーに送信すると、クライアントとサーバーの間で TCP 接続が開かれ、応答を取得した後に TCP 接続が終了し、各 HTTP リクエストはサーバーへの個別の TCP 接続を開きます。クライアントがサーバーに 10 個のリクエストを送信すると、10 個の個別の TCP 接続が開かれます。応答/フォールバックを取得した後に閉じられます。
ASCIIでエンコードされたHTTPメッセージ情報、HTTPプロトコルのバージョン(HTTP/1.1、HTTP/2)、HTTPメソッド(GET/POSTなど)、HTTPヘッダ(コンテンツタイプ、コンテンツ長)、ホスト情報などで構成される各HTTPリクエストメッセージ. と、サーバーに転送される実際のメッセージを含む本文。 HTTP ヘッダーのサイズは 200 バイトから 2 KB までさまざまですが、HTTP ヘッダーの一般的なサイズは 700 ~ 800 バイトです。 Web アプリケーションが、エージェントのストレージ機能を拡張するクライアント側でより多くの Cookie やその他のツールを使用すると、HTTP ヘッダーのペイロードが減少します。

ウェブソケット: WebSocket は双方向であり、開始元の HTTP とは異なり、クライアントとサーバーの通信の同じシナリオで使用される全二重プロトコルです。 ws:// または wss:// 。これはステートフル プロトコルであり、クライアントとサーバー間の接続は、いずれかの当事者 (クライアントまたはサーバー) によって終了されるまで存続することを意味します。クライアントとサーバーのいずれかが接続を閉じた後、接続は両端から終了されます。
JavaでExcelファイルを読む
クライアントとサーバーの通信の例を見てみましょう。Web ブラウザーとサーバーであるクライアントがあり、クライアントとサーバー間の接続を開始するたびに、クライアントとサーバーはハンドシェイクを行い、新しい接続とこの接続の作成を決定します。いずれかによって終了されるまで生き続けます。接続が確立され、アクティブになっている場合、通信は終了するまで同じ接続チャネルを使用して行われます。
これは、クライアントとサーバーのハンドシェイクの後、クライアントとサーバーが存続させるための新しい接続を決定する方法です。この新しい接続は WebSocket として知られます。通信リンクが確立され、接続が開かれると、クライアントとサーバー間の接続が維持されるまで、メッセージ交換が双方向モードで行われます。どちらか (クライアントとサーバー) が死亡するか、接続を閉じることを決定した場合、両方の当事者によって接続が閉じられます。ソケットの動作方法は HTTP の動作とは少し異なり、ステータス コード 101 は WebSocket のスイッチング プロトコルを示します。

Web ソケットは次の場合に使用できます。
- リアルタイム Web アプリケーション: リアルタイム Web アプリケーションは、Web ソケットを使用して、バックエンド サーバーによって継続的に送信されるクライアント側のデータを表示します。 WebSocket では、すでに開いている同じ接続にデータが継続的にプッシュ/送信されるため、WebSocket が高速になり、アプリケーションのパフォーマンスが向上します。
たとえば、取引 Web サイトやビットコイン取引では、価格変動と移動データを表示するために、WebSocket チャネルを使用してバックエンド サーバーからクライアント エンドにデータが継続的にプッシュされます。
ゲーム アプリケーション: ゲーム アプリケーションでは、データがサーバーによって継続的に受信され、UI を更新しなくても画面に反映され、新しい接続を確立しなくても UI が自動的に更新されます。ゲームアプリケーションで非常に役立ちます。
チャット アプリケーション: チャット アプリケーションは、WebSocket を使用して、加入者間でメッセージを交換、公開、ブロードキャストするために 1 回だけ接続を確立します。メッセージの送受信と 1 対 1 のメッセージ転送に、同じ WebSocket 接続を再利用します。
WebSocket を使用しない場合: WebSocket は、ネットワーク上で送信されるデータのリアルタイム更新または連続ストリームが必要な場合に使用できます。古いデータを取得したい場合、またはアプリケーションで処理するために一度だけデータを取得したい場合は、次のようにする必要があります。 HTTPプロトコル あまり頻繁に必要とされない古いデータや 1 回しか取得されない古いデータは、単純な HTTP リクエストでクエリできるため、このシナリオでは WebSocket を使用しない方がよいでしょう。
注記: データを 1 回だけロードする場合、RESTful Web サービスはサーバーからデータを取得するのに十分です。
HTTP 接続と WebSocket 接続の違い:
| WebSocket接続 | HTTP接続 |
|---|---|
| WebSocket は、確立された接続チャネルを再利用して、クライアントからサーバーに、またはサーバーからクライアントにデータを送信できる双方向通信プロトコルです。接続は、クライアントまたはサーバーによって終了されるまで維持されます。 | HTTP プロトコルは、接続指向のトランスポート層プロトコルである TCP プロトコル上で動作する一方向プロトコルです。HTTP 接続が閉じられた応答を取得した後、HTTP リクエスト メソッドを使用して接続を作成できます。 |
| (取引、監視、通知) サービスなどのほぼすべてのリアルタイム アプリケーションは、WebSocket を使用して単一の通信チャネルでデータを受信します。 | シンプルな RESTful アプリケーションはステートレスな HTTP プロトコルを使用します。 |
| WebSocket は HTTP 接続より高速であるため、頻繁に更新されるすべてのアプリケーションで WebSocket が使用されました。 | 特定の時間接続を保持したくない場合、またはデータ送信のために接続を再利用したくない場合。 HTTP 接続は WebSocket よりも低速です。 |
注記: プロジェクトに応じて、WebSocket または HTTP 接続のどちらを使用するかを選択する必要があります。