【ネットワーク】WebSocket技術についてのチートシート - j-komatsu/myCheatSheet GitHub Wiki
WebSocket技術についてのチートシート
WebSocketとは?
- リアルタイム通信を実現するための技術
- HTTPでは不可能な双方向通信が可能
- WebSocketを使用すると、クライアント(ブラウザ)とサーバー間で継続的な接続が維持され、データを即座に送受信できます
小学生にも分かる例
- 普通のウェブサイト(HTTP)は 手紙のやり取り のようなものです。毎回新しい封筒に手紙を書いて送ります。
- WebSocketは 電話で話す ようなものです。最初に電話をかけた後は、何回も話したり聞いたりできます。
仕組み
1. 初期接続(ハンドシェイク)
- クライアントがサーバーに接続リクエストを送る
- 通常のHTTPリクエストを利用
- サーバーが「WebSocket通信を使ってもOK」と応答すると、接続が確立
2. 継続的な通信
- 接続が確立すると、HTTPからWebSocketプロトコルに切り替わります。
- 切り替え後はデータが 即座に、軽量に やり取りされます。
sequenceDiagram
Browser->>Server: HTTPリクエストでWebSocket接続要求
Server-->>Browser: 接続OK(101 Switching Protocols)
Browser->>Server: データ送信(WebSocket)
Server-->>Browser: データ応答(WebSocket)
どんなときに使う?
- チャットアプリ
- 例: LINEやSlack
- ゲーム
- 例: オンラインマルチプレイゲーム
- 株価のリアルタイム更新
- IoTデバイスの状態監視
小学生にも分かる使い道
チャットアプリの例
- あなたと友達がチャットしているとします。
- もし普通の手紙(HTTP)を使うと、友達に「こんにちは!」と送ってから返事を待つ間に時間がかかります。
- WebSocketを使うと電話のように話し続けられるので、「こんにちは!」「元気?」「元気だよ!」とすぐにやり取りできます。
実装例
WebSocketサーバー(Node.js)
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });
server.on('connection', (socket) => {
console.log('クライアントが接続しました');
// クライアントからのメッセージを受信
socket.on('message', (message) => {
console.log(`受信: ${message}`);
socket.send(`サーバーからの応答: ${message}`);
});
// 接続終了時
socket.on('close', () => {
console.log('クライアントが切断しました');
});
});
WebSocketクライアント(ブラウザ)
const socket = new WebSocket('ws://localhost:8080');
// サーバー接続成功時
socket.onopen = () => {
console.log('サーバーに接続しました');
socket.send('こんにちは!');
};
// サーバーからのメッセージ受信時
socket.onmessage = (event) => {
console.log(`サーバーの応答: ${event.data}`);
};
// 接続が閉じた時
socket.onclose = () => {
console.log('接続が閉じられました');
};
よくある質問(FAQ)
Q: WebSocketはHTTPとどう違うの?
- HTTPはリクエストとレスポンスが1回ずつ行われる仕組み
- WebSocketは双方向通信を持続的に行う仕組み
Q: WebSocketを使うとどんなメリットがあるの?
- リアルタイムでデータ更新が必要な場合に適している
- 通信量を削減できる
Q: 使うために特別なソフトウェアが必要?
- 多くのブラウザが標準でWebSocketをサポートしているので、特別な設定は不要です。
まとめ
- WebSocketはリアルタイム通信を実現する便利な技術
- チャットやゲームなど、リアルタイム性が求められるアプリに最適
- 実装は簡単で、Node.jsなどを使うと手軽に始められる