IT用語

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

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

一言でまとめるなら、

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

だね。

ABOUT ME
クマノくらげ
クマノくらげ
難しいIT用語やビジネス用語を、できるだけ身近な例えで解説するブログです。 「専門用語を見ると眠くなる人」でも読めるように、画像や会話形式を多めにしています。 AWS12冠達成済み。
記事URLをコピーしました