ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
WebSocket は、1 本の TCP 接続の上で、クライアントとサーバが双方向 (全二重) に、かつリアルタイムにデータをやり取りするためのプロトコルです (RFC 6455)。通常の HTTP は「クライアントが要求し、サーバが応答する」という一方向のやり取りの繰り返しで、サーバ側から自発的にデータを送ることができません。WebSocket はこの制約を取り払い、サーバからクライアントへいつでも push できる「つなぎっぱなしの通信路」を提供します。親セクションは Web通信プロトコル です。
仕組み
WebSocket 接続は、まず通常の HTTP リクエストとして始まります。クライアントは Upgrade: websocket と Connection: Upgrade ヘッダを付けてリクエストし、サーバが 101 Switching Protocols で応答すると、その TCP 接続はそのまま WebSocket 通信路へ切り替わります。これを WebSocket ハンドシェイク と呼びます。
- アップグレード: HTTP から WebSocket へ昇格するため、既存の 80/443 ポートと HTTP インフラ (プロキシ・ロードバランサ) をそのまま活用できます。
- フレーム単位の双方向通信: ハンドシェイク後は HTTP のリクエスト/レスポンスではなく、軽量な「フレーム」を双方向に送り合います。テキストフレームとバイナリフレームがあります。
- ハートビート: 接続が生きているか確認するため ping フレームを送り、相手が pong を返します。無応答なら切れたとみなして再接続します。
URL スキームは 2 種類あり、平文の ws:// と TLS で暗号化された wss:// があります。HTTP に対する HTTPS と同じ関係で、本番環境では盗聴・改ざんを防ぐため wss:// を使うのが基本です。
実用例
ブラウザ標準の WebSocket API を使うと、数行でサーバとリアルタイム通信できます。下記は接続し、メッセージを送受信し、ハートビートを送る最小例です。
// ブラウザ側 (JavaScript)
const ws = new WebSocket("wss://example.com/chat");
ws.onopen = () => {
console.log("接続しました");
ws.send(JSON.stringify({ type: "join", room: "general" }));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
console.log("受信:", msg);
};
ws.onclose = () => console.log("切断されました");
ws.onerror = (e) => console.error("エラー", e);
// ハートビート: 30 秒ごとに ping 代わりのメッセージを送る
setInterval(() => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify({ type: "ping" }));
}
}, 30000);
サーバ側は Node.js の ws ライブラリ、Python の websockets、Go の gorilla/websocket などで実装します。接続中のクライアント一覧を保持し、誰かの発言を全員に配信 (ブロードキャスト) するのが典型的なチャット実装です。
主な用途
- チャット・メッセージング: 双方向の即時配信で、リロードなしにメッセージが届く。
- リアルタイム通知: サーバ発生イベント (いいね・コメント・アラート) を即座に push する。
- ライブ更新: 株価・スポーツのスコア・ダッシュボードの数値をリアルタイムに反映する。
- 共同編集・オンラインゲーム: 複数ユーザの操作を低遅延で同期する。
HTTP ポーリングとの比較
| 方式 | サーバ→クライアント push | 接続 | 遅延 | オーバーヘッド |
|---|---|---|---|---|
| ポーリング | 不可 (定期的に問い合わせ) | 毎回張り直し | 大きい | 大 (毎回ヘッダ) |
| ロングポーリング | 擬似的に可 | 応答ごとに張り直し | 中 | 中 |
| WebSocket | 可 (全二重) | つなぎっぱなし | 小さい | 小 (軽量フレーム) |
| SSE (Server-Sent Events) | 可 (サーバ→クライアントのみ) | つなぎっぱなし | 小さい | 小 |
注意点
- 本番は wss 必須:
ws://は平文で盗聴・改ざんに弱い。HTTPS ページからは混在コンテンツ扱いでws://がブロックされるためwss://を使う。 - 切断と再接続の設計: モバイルやスリープで接続は容易に切れる。ハートビートで検知し、指数バックオフで自動再接続する仕組みが要る。
- スケールアウトの難しさ: 接続が状態を持つため、複数サーバに分散すると「どのサーバに誰が繋がっているか」の共有が必要 (Redis pub/sub など)。
- プロキシ/LB の対応: 一部の中継機器は長時間のアイドル接続を切る。タイムアウト設定やハートビート間隔の調整が要る。
- 要求-応答で足りるなら不要: 単発の取得なら通常の HTTP/2 で十分。常時接続のコストを払う価値があるかを見極める。
関連リンク
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- HTTP/2
- HTTP/3(QUIC)
- WebSocket
- gRPC
- WebRTC
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?