WebSocketとは?HTTPとの違いを初心者向けに画像多めで解説!
この記事でわかること
・WebSocketとは何か
・HTTP通信との違い
・ポーリングとの違い
・ws:// と wss:// の違い
・WebSocketが向いている場面、向いていない場面
・Ping/Pongとポーリングの違い
WebSocketとは?

WebSocketは、簡単に言うと、
ブラウザとサーバーがつながったまま、リアルタイムにやり取りできる通信の仕組みだよ。

つながったまま?

そう。
普通のWebページを見るときは、ブラウザがサーバーに「このページください」とお願いして、サーバーが返事を返す。
基本的には、リクエストして、レスポンスが返ってきたら一区切りなんだ。
ブラウザ:
ページください
サーバー:
はい、ページです


普通のHTTP通信ってそんな感じだよね。

そう。
でもWebSocketは、一度つながったら、その接続を維持して、ブラウザとサーバーが何度もやり取りできる。
ブラウザ ⇄ サーバー つながったまま、何度もやり取りできる


なるほど。
電話をつなぎっぱなしにするみたいな感じ?

そんな感じだよ。
WebSocketは、ブラウザとサーバーの間に通話状態を作るイメージだね。
WebSocketを一言でいうと

WebSocketを一言でいうなら、こんな感じ。
ブラウザとサーバーが接続を維持したまま、双方向にリアルタイム通信する仕組み

双方向ってことは、ブラウザからもサーバーからも送れるの?

そこが大事。
HTTPでは、基本的にブラウザがお願いして、サーバーが返す形が多いんだ。
でもWebSocketでは、サーバー側からブラウザへデータを送ることもできるよ。
HTTPのイメージ

HTTPは、コンビニで毎回店員さんに聞きに行く感じ。
客:お弁当ありますか?
店員:あります
客:お茶ありますか?
店員:あります


毎回聞いて、毎回答えてもらう感じだね。

そう。
必要なときにリクエストを送って、レスポンスを受け取る。
WebSocketのイメージ

WebSocketは、電話をつなぎっぱなしにして会話する感じ。
ブラウザ:つながったよ
サーバー:OK、これから必要な情報があったら送るね
サーバー:新しいメッセージが来たよ
ブラウザ:了解。こっちからも送るね


毎回「何かありますか?」って聞かなくても、サーバーから知らせてくれるんだ。

そう。
だからリアルタイム性が必要なサービスと相性がいい。
WebSocketが使われる場面

WebSocketって、どんなところで使われるの?

たとえば、こういうものだね。

| 使われる場面 | 理由 |
|---|---|
| チャット | 新しいメッセージをすぐ表示したい |
| オンラインゲーム | プレイヤーの動きをリアルタイムに共有したい |
| 株価・為替レート | 価格の変化をすぐ反映したい |
| 通知機能 | 新着通知をすぐ届けたい |
| 共同編集ツール | 他の人の編集内容をすぐ反映したい |
| 監視ダッシュボード | サーバー状態やセンサー値をリアルタイムに表示したい |

リアルタイムに変わるものと相性がいいんだね。

そう。
「サーバー側で変化があったら、すぐブラウザに届けたい」場合に便利なんだ。
チャットで考えるWebSocket

チャットで考えると分かりやすそう。

いいね。
たとえば、Bさんがチャット画面を開いているとする。
HTTPだけでやる場合

HTTPだけで新着メッセージを確認しようとすると、ブラウザが定期的にサーバーへ聞きに行くことになる。

ブラウザ: 新しいメッセージある?
サーバー: ないよ
数秒後
ブラウザ: 新しいメッセージある?
サーバー: まだないよ
数秒後
ブラウザ: 新しいメッセージある?
サーバー: あるよ

ずっと聞き続けるのか。
ちょっと無駄が多そう。

そう。
このように、定期的に問い合わせる方法を ポーリング と呼ぶよ。
WebSocketでやる場合

WebSocketなら、接続を維持しておいて、メッセージが来たらサーバーから送れる。

ブラウザ ⇄ サーバー
接続したまま待つ
(メッセージが受信されたら)
サーバー: 新しいメッセージが来たよ

ブラウザが何度も確認しなくていいんだね。

そう。
だからチャットや通知みたいなリアルタイム機能に向いているよ。
WebSocketの基本的な流れ

WebSocketって、どうやってつながるの?

最初はHTTPで接続を始める。
そのあと、サーバーとブラウザが「WebSocket通信に切り替えよう」と合意するんだ。

最初からWebSocketじゃないの?

最初はHTTPの仕組みを使って、途中でWebSocketに切り替える。
この切り替えを Upgrade と呼ぶことがあるよ。
1. ブラウザがサーバーに接続する
2. 「WebSocketに切り替えたい」と伝える
3. サーバーがOKする
4. WebSocket接続が確立する
5. 双方向にデータを送れるようになる

最初に握手してから、WebSocket通信が始まる感じか。

この最初のやり取りを ハンドシェイク と呼ぶよ。
WebSocketのURL

WebSocketってURLも普通のURLと違うの?

うん。
HTTPでは http:// や https:// を使うよね。
WebSocketでは、次のようなURLを使う。
| URL | 意味 |
|---|---|
ws:// | 暗号化なしのWebSocket |
wss:// | 暗号化ありのWebSocket |

wss:// は https:// みたいなもの?

そう考えると分かりやすいね。
実際のWebサービスでは、安全のために wss:// を使うことが多いよ。
WebSocketのメリット

WebSocketを使うメリットをまとめるとこんな感じだよ。

| メリット | 内容 |
|---|---|
| リアルタイム通信しやすい | サーバーからすぐにデータを送れる |
| 双方向通信できる | ブラウザとサーバーの両方からデータを送信できる |
| 無駄な問い合わせを減らせる | 定期的に確認する通信を減らせる |
| 低遅延にしやすい | データの変化をすぐに反映できる |
| チャットやゲームに向く | 常に状態が変化するサービスと相性が良い |

やっぱり、
サーバーからすぐ情報が来るのが大きいんだね。

そうだね。だから、
「何か変わったらすぐ反映したい」ならWebSocketはかなり便利だね。
WebSocketのデメリット・注意点

逆にデメリットはこんな感じだよ。

| 注意点 | 内容 |
|---|---|
| 接続を維持する必要がある | サーバー側で接続状態を管理する必要がある |
| 再接続の設計が必要 | 通信が切断された場合の復旧処理が必要になる |
| スケール設計が難しい | 大量の同時接続を処理できるよう設計する必要がある |
| セキュリティ対策が必要 | 認証・認可・暗号化などの対策が重要になる |
| 普通の画面表示には不要なことも多い | 一般的なWebページであればHTTP通信だけで十分な場合が多い |

つながりっぱなしだから、サーバー側も大変なんだね。

1人や2人なら問題なくても、同時接続が何万人になると、接続管理がかなり大事になる。
WebSocketでよく使われる仕組み

WebSocketでよく出てくる仕組みに、Ping/Pong っていうのがあるよ。

ピンポン?

接続が生きているか確認するためのやり取りだよ。こんなやり取りをする。

サーバー: まだつながってる?
ブラウザ: つながってるよ

卓球のように、接続状態のやりとりをするんだね。

そうだね。
接続が切れていることに気がつかないと困るから、定期的に確認することがあるんだよ
Ping/Pongはポーリングとどう違う?

定期的に確認・・?
それってさっきHTTPで言っていたポーリングと同じってこと?

ざっくり言うと、こんな違いだよ。
Ping/Pongは「接続が生きているか」の確認
ポーリングは「新しいデータがあるか」の確認

ポーリングは「新着ある?」
Ping/Pongは「まだつながってる?」
ってことか。

そう同じ定期的にしていることでも、確認しているものが違うんだ。

WebSocketが向いているケース

WebSocketが向いているケースをまとめてみようか。

| 向いているケース | 理由 |
|---|---|
| チャット | メッセージをすぐ届けたい |
| オンラインゲーム | プレイヤーの状態や操作をリアルタイムに共有したい |
| 共同編集 | 他のユーザーの編集内容をすぐ反映したい |
| 通知 | 新着情報や更新情報を即座に表示したい |
| 株価・為替 | 値動きをリアルタイムに反映したい |
| 監視画面 | サーバーや機器の状態変化をすぐに表示したい |

リアルタイム性が必要なら向いてるんだよね。
WebSocketが向いていないケース

逆にこういうケースでは、普通のHTTPで十分なことが多いよ。

| 向いていないケース | 理由 |
|---|---|
| 普通のWebページ表示 | HTTP通信だけで十分な場合が多い |
| たまにしか更新しない情報 | 定期的なデータ取得(ポーリング)で対応できる場合がある |
| 一度きりのデータ取得 | 接続を維持する必要がない |
| リアルタイム性が不要 | WebSocketのメリットを活かせない |
| サーバー管理を簡単にしたい | WebSocketは接続状態の管理が必要になる |

リアルタイムじゃないなら、無理に使わなくていいんだね。

そう。
WebSocketは便利だけど、使いどころが大事だよ。
試験で迷ったときの判断ポイント

試験ではこんなキーワードが出てきたらWebSocketのことか疑うといいよ。
| キーワード | WebSocketとの関係 |
|---|---|
| 双方向通信 | WebSocketの大きな特徴。ブラウザとサーバーが互いにデータを送受信できる |
| リアルタイム通信 | チャットやオンラインゲームなどで利用される代表的な特徴 |
| 接続を維持 | 一度接続すると通信路を維持し続ける |
| サーバーから通知 | サーバー側からブラウザへ即時にデータを送信できる |
ws:// / wss:// | WebSocketで使用するURLスキーム(wss:// は暗号化あり) |
| HTTP Upgrade | 最初はHTTPで接続し、その後WebSocket通信へ切り替える仕組み |

双方向、リアルタイム、接続維持がキーワードだね。
まとめ

WebSocketとは、
ブラウザとサーバーが接続を維持したまま、双方向にリアルタイム通信するための仕組みだよ。

| 項目 | 内容 |
|---|---|
| WebSocket | 接続を維持して双方向通信を行う仕組み |
| 特徴 | リアルタイム通信に適している |
| URL | ws:// または wss:// |
| HTTPとの違い | 基本はリクエストとレスポンス単位でやり取りするが、WebSocketは接続を維持して双方向に通信する |
| 向いている用途 | チャット、オンラインゲーム、通知、共同編集、監視画面 |
| 注意点 | 接続管理、再接続、認証・認可、セキュリティ対策が重要 |

つまりWebSocketは、
チャットみたいに「すぐ届いてほしい情報」を扱うときに便利な通信なんだね。

一言でまとめるなら、
WebSocketは、ブラウザとサーバーが電話をつなぎっぱなしにするように、リアルタイムでやり取りする仕組み
だね。

