まずWebsocketが使われる理由から
Websocketが使われる理由
一言でいえば、
リアルタイム性、効率性、およびパフォーマンスの向上。
詳しく解説すると理由はいくつかあって、
1. リアルタイム通信
WebSocketは、リアルタイムの双方向通信を可能にします。これにより、ユーザーとサーバー間で即時にデータを交換でき、リアルタイムアプリケーション(例:オンラインゲーム、チャットアプリ、ライブスポーツのアップデートなど)のパフォーマンスが向上します。
2. 効率的なデータ転送
WebSocketは、持続的な接続を通じてデータを送受信するため、データ転送のオーバーヘッドが少なくなります。これにより、ネットワークの効率が向上し、レスポンスタイムが短縮されます。
3. サーバーのリソース最適化
WebSocketは、オープンな接続を維持しながらも、リソースの消費を最小限に抑えます。これにより、サーバーの負荷が軽減され、大量の同時接続を効率的に処理できます。
4. 低レイテンシ
WebSocketは、データの送受信における遅延を削減します。これは、リアルタイムトレーディング、オンラインゲーム、ライブストリーミングなど、レイテンシが重要なアプリケーションにとって特に有益です。
5. 簡潔なプロトコル
WebSocketは、プロトコルが簡潔であるため、開発とデバッグが容易です。また、APIとの統合もスムーズに行えます。
6. セキュリティ
WebSocketは、wss(WebSocket Secure)を通じて、データの暗号化とセキュリティを提供します。これにより、安全にデータを送受信できます。
7. スケーラビリティ
WebSocketは、スケーラビリティに優れており、大量のリアルタイムデータを効率的に処理できます。これにより、大規模なリアルタイムアプリケーションもサポートできます。
これらの理由から、
WebSocketはリアルタイム性と効率性を必要とする多くのウェブアプリケーションやサービスで採用されているみたいです。
HTTP通信とWebSocketでの通信の違い
HTTP通信の場合
・一つのコネクションで一つのリクエストしか送ることができない。
・リクエストはクライアントからしか送ることができない。(サーバーから通信を始めることができない)
・ヘッダーが冗長(情報量が多くなる)
WebSocketでの通信の場合
サーバープッシュ機能
・一度コネクションを確立したあとは、サーバーとクライアントのどちらからも通信を行うことが可能。
通信量削減
・一度コネクションを確立すると、そのコネクション上で通信を行う(HTTPのように通信のたびにコネクションを作らない)
・ヘッダのサイズが最小2バイト、最大4byteと小さい
WebSocketでの双方向通信の仕組み
websocketプロトコルでは、
まずコネクションの確立(ハンドシェイク)を行うことで、双方向通信の実現がされる
ハンドシェイクとは?
クライアントとサーバー間でWebSocket接続を確立するはじめのステップ。
ハンドシェイクは、HTTPプロトコルでHTTP通信を使用して行われ、
その後、通信はWebSocketプロトコルにアップグレードされます。
ハンドシェイクのプロセス
ステップ1: クライアントからサーバーへのリクエスト
クライアント(通常はウェブブラウザ)は、WebSocket接続を開始するために、サーバーに特殊なHTTPリクエストを送信します。
このリクエストには、Upgrade ヘッダーと Connection ヘッダーが含まれ、WebSocketプロトコルへのアップグレードを要求します。
ステップ2: サーバーからクライアントへのレスポンス
サーバーがクライアントのWebSocket接続要求を受け入れると、アップグレードヘッダーとともにHTTP 101ステータスコード(Switching Protocols)を使用してレスポンスを送り返します。
ステップ3: WebSocket接続の確立
これで、HTTPプロトコルからWebSocketプロトコルへのアップグレードが完了し、クライアントとサーバー間でリアルタイムの双方向通信が可能になります。この接続は、TCPソケット上で開かれ、データのフレームを効率的に送受信することができます。
フレームとはWebSocketで送信されるデータの単位のことです。
おわりに
いろいろと調べている中で、
websocketはシンプルな仕組みで実現されていることがわかりました。
websocketをくまなく理解することもそう難しくないと思います。
これからは双方向で通信するアプリケーションの需要が高まっていくと思います。
簡単なので初心者、中級者でまだ理解があやふやな方はこの際に、
ささっとwebsocketの仕組みを理解しておいてもいいのではないかと思います。
いいね、キープ、フォローが投稿の励みになります。
ここまで読んでくれた方はぜひポチっとお願いします。