リアルタイム通信のしくみ

何度も聞きに行く「ポーリング」と、つなぎっぱなしの「WebSocket」

この記事の要約

画面が勝手に最新へ変わる裏側は、何度も聞きに行く「ポーリング」か、つなぎっぱなしの回線にサーバーが押し出す「WebSocket」です。必要な即時性で使い分けます。

  • ポーリングは単純だが空振りの通信が増える
  • WebSocketは新着の瞬間に向こうから届く
  • 数分に一度の更新ならポーリングで十分

なぜ「リアルタイム」に画面が変わるのか

チャットの新着や配送状況など、操作していないのに画面が最新へ変わることがあります。基本の通信は、ブラウザが「ください」と頼んで初めてサーバーが答える片方向です。サーバー側で起きた変化は、どうやって届くのでしょうか。

ポーリング vs WebSocket を時系列で見比べる

[新着なし(空振り)][新着あり]新着の有無で返答が変わる数秒ごとに繰り返し(例: 5秒おき)以後はサーバーが新着のたびに自発的にプッシュ更新ありますか?問い合わせありません空振りこれが新着です新着を返す接続を申し込む(最初の1回だけ)接続接続OK(双方向の通り道が開通)開通新着が出た瞬間にプッシュプッシュ①次の新着もそのまま届くプッシュ②ブラウザからもいつでも送れる双方向送信
ブラウザあなたの画面
サーバー情報を持つ側

各ステップ・参加者・分岐をクリックすると、その仕組みの説明がここに表示されます。

この図をテキストで読む

シーケンス図「リアルタイム通信(ポーリング vs WebSocket)」。参加者2人、ステップ8個。 【参加者】(左から右) - ブラウザ: あなたの画面 - サーバー: 情報を持つ側 【流れ】(上から下へ) ── ① ポーリング方式:何度も「更新ある?」と聞きに行く ── (数秒ごとに繰り返し(例: 5秒おき) の枠) 1. ブラウザ → サーバー: 更新ありますか? (新着の有無で返答が変わる の枠) [新着なし(空振り) の場合] 2. サーバー → ブラウザ: ありません(応答) [新着あり の場合] 3. サーバー → ブラウザ: これが新着です(応答) ── ② WebSocket方式:一度つないだら開けっぱなし ── 4. ブラウザ → サーバー: 接続を申し込む(最初の1回だけ) 5. サーバー → ブラウザ: 接続OK(双方向の通り道が開通)(応答) (以後はサーバーが新着のたびに自発的にプッシュ の枠) 6. サーバー → ブラウザ: 新着が出た瞬間にプッシュ 7. サーバー → ブラウザ: 次の新着もそのまま届く 8. ブラウザ → サーバー: ブラウザからもいつでも送れる

同じ見た目でも、聞きに行く回数と通知のしかたがまるで違います。

「リアルタイムっぽい」には種類がある

画面が勝手に更新されても、中身がポーリングなら実は数秒ごとの問い合わせかもしれません。即時性がどれだけ必要かで、ポーリングで十分かWebSocketが要るかが決まります。まず必要な速さを見極めるのがコツです。

押さえておきたい用語

ポーリング
ブラウザが一定間隔でサーバーに「更新ある?」と繰り返し聞きに行く方式。単純に作れるが、空振りの問い合わせが増えやすい。
WebSocket
最初に一度つないだ回線を開けたまま保ち、双方向にメッセージを流せる通信方式。サーバー発の通知に向く。
プッシュ(サーバープッシュ)
サーバー側から自分のタイミングでブラウザへ情報を押し出すこと。ポーリングでは原則できず、WebSocketで可能になる。
ブロードキャスト
つながっている全員へ同じメッセージを一斉に配信すること。チャットの新着を全員の画面へ同時に届けるなどに使う。
双方向通信
ブラウザ→サーバーだけでなくサーバー→ブラウザにも、どちらからでも送れる状態。WebSocketの特長。

ここから先へ

この解説とつながりのあるページ

Webのしくみ入門』の歩き方 3/3 歩目