1. 導入:なぜWebSocketsが重要なのか
通常のWebサイトは、ブラウザがサーバーに「データをちょうだい」とお願いして初めて返事が届く仕組み(HTTP通信)で動いています。しかし、チャットアプリや株価のリアルタイム表示のように、サーバー側から能動的に情報を送る必要がある場合、この仕組みでは限界があります。WebSocketsを使えば、一度繋いだら切断せずに双方向でやり取りができるため、遅延のない滑らかなリアルタイム通信が可能になります。
2. 基礎知識:WebSocketsの仕組み
WebSocketsは、クライアント(ブラウザ)とサーバーの間で「一度だけ」握手(ハンドシェイク)を行うことで、その後はコネクションを維持し続けるプロトコルです。
HTTP通信との違い:
HTTP通信は「要求→応答」を繰り返すため、通信のたびにヘッダー情報などのオーバーヘッドが発生します。一方、WebSocketsは確立された接続を通じてデータを送受信するため、非常に効率的で、サーバーからのプッシュ通知も容易に行えます。
3. 実装/解決策:まずは接続してみよう
JavaScriptには標準でWebSocket APIが搭載されています。これを使うことで、複雑なライブラリなしで通信を開始できます。手順はシンプルで「URLを指定してインスタンスを作成」し、「イベントハンドラを登録する」という流れです。
4. サンプルプログラム
以下のコードは、公開されているテスト用サーバーに接続して、メッセージを送受信する基本的な例です。そのままブラウザのコンソールなどに貼り付けて動作を確認してみてください。
// 1. WebSocketサーバーへ接続を開始
// ※今回はテスト用エコーサーバーを使用しています
const socket = new WebSocket('wss://echo.websocket.org');
// 2. 接続が完了した時の処理
socket.onopen = (event) => {
console.log('接続成功!');
// サーバーにメッセージを送信
socket.send('こんにちは、WebSocket!');
};
// 3. サーバーからメッセージを受け取った時の処理
socket.onmessage = (event) => {
console.log('サーバーからの返事:', event.data);
};
// 4. エラーが発生した時の処理
socket.onerror = (error) => {
console.error('エラーが発生しました:', error);
};
// 5. 接続が切断された時の処理
socket.onclose = (event) => {
console.log('接続が切れました');
};
5. 応用・注意点:現場で気をつけるべきこと
現場でWebSocketsを利用する際には、以下の点に注意が必要です。
・切断時の自動再接続:
ネットワークの不安定さやサーバー側のタイムアウトで、接続は予期せず切れることがあります。必ず「接続が切れたら一定時間後に再接続を試みる」という再接続ロジックを実装しましょう。
・セキュリティ:
必ず「ws://」ではなく暗号化された「wss://」を使用してください。また、WebSocket接続時にも認証トークンをヘッダーやパラメータに含め、不正な接続を防ぐことが重要です。
・プロキシとファイアウォール:
一部の厳格なファイアウォール環境では、WebSocketの通信が遮断されることがあります。その場合は、Socket.ioのような、HTTPロングポーリングに自動フォールバックするライブラリの利用を検討するのが一般的です。