6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

websocketを使いたい人のためにまとめたよ

Posted at

まず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の仕組みを理解しておいてもいいのではないかと思います。

いいね、キープ、フォローが投稿の励みになります。
ここまで読んでくれた方はぜひポチっとお願いします。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?