Web の普段の通信(HTTP)は、手紙のやり取りに似ています。こちらから手紙を出さない限り、相手から返事は来ません。ブラウザが聞いて、サーバーが答える。一問一答の繰り返しです。
WebSocketは、これを電話に変える仕組みです。ブラウザとサーバーが一度つながったら、切るまでは接続が続き、どちらからでも好きなタイミングで話しかけられます。サーバーの側で何か変化があれば、ブラウザが聞いていなくても、すぐに伝えられます。
電話がつながったままだとできること
- チャットで、相手のメッセージが届いた瞬間に画面に出る
- 株価や試合のスコアのように、頻繁に変わる情報をすぐ反映する
- オンラインゲームで、複数のプレイヤーの動きをそろえる
- 時間のかかる処理の進み具合を、画面に逐一表示する
どれも「常に最新の状態を見せたい」機能です。出来事が起きたときにサーバーから URL へ一度だけ通知する Webhook と違い、接続が続く間、何度でも双方向にやり取りできます。
その機能に本当に電話が必要か
電話をつなぎっぱなしにするのは、それなりに手間がかかります。接続を長い時間保つぶん、利用者が増えるとサーバーの負荷が積み上がります。電波の悪い場所で通話が切れるように、接続が切れたときに自動でつなぎ直す仕組みも必要です。誰と話しているかを確かめる認証も、普段の HTTP とは別に設計することが多くなります。URL も ws:// や、暗号化した wss:// のような専用のものを使います。
一覧のデータを取ってくる、フォームの内容を送る、といった単純なやり取りなら、普段の HTTP のほうがシンプルで扱いやすいのです。リアルタイムに更新されることが、その機能にとって本当に必要か。採用する前に、まずそこを確かめましょう。