Agile育成ブログ
未来を変える喜びを
未分類

websocket

WebSocketは、サーバーとクライアント間でリアルタイム双方向通信を可能にする通信プロトコルです。通常のHTTP通信(リクエストとレスポンスの一回限りのやり取り)とは異なり、WebSocketでは接続が一度確立されると、その接続を維持してデータのやり取りを行えます。


WebSocketの特徴

  1. 双方向通信
    • サーバーとクライアントが自由にデータを送受信可能です。
    • クライアントからだけでなく、サーバーからもメッセージを送信できます。
  2. リアルタイム
    • 接続が常にオープンなため、リアルタイムでの通知や更新が可能です。
    • チャットアプリ、ゲーム、リアルタイムのデータストリーム(例: 株価更新)に最適。
  3. 軽量
    • HTTPヘッダが不要なため、データ送受信が効率的です。
  4. TCPベース
    • WebSocketはTCPをベースに動作し、通常のブラウザでサポートされています。

WebSocketの仕組み

  1. ハンドシェイク
    • クライアントはHTTPリクエストを送信してWebSocket接続を開始します。
    • サーバーがリクエストを承認すると、HTTP接続はWebSocket接続にアップグレードされます。

WebSocketの重要なメソッドとイベント

サーバー側 (ws)

  1. on('connection', callback)
    • 新しいクライアントが接続した際のイベント。
  2. on('message', callback)
    • クライアントからメッセージを受信した際のイベント。
  3. on('close', callback)
    • クライアントが切断した際のイベント。
  4. send(data)
    • クライアントにデータを送信。

クライアント側 (WebSocket)

  1. onopen
    • 接続が確立された際に呼び出される。
  2. onmessage
    • サーバーからメッセージを受信した際に呼び出される。
  3. onclose
    • 接続が閉じられた際に呼び出される。
  4. send(data)
    • サーバーにデータを送信。

WebSocketとHTTPの違い

特徴WebSocketHTTP
接続の持続性持続的(常に接続)一時的(リクエストごとに接続)
データ送受信方向双方向クライアントからサーバー
リアルタイム性高い低い
オーバーヘッド低い高い

エラー集

const ws = new WebSocket(`${protocol}//${window.location.host}:5000/ws`);
  • window.location.host
    hostにはドメイン名とポート番号(存在する場合)が含まれます。しかし、現在の環境ではポート番号が明示的に指定されていないため、この値が不正確になっています。
  • 不正なURL
    window.location.hostが正しく解決できなかった場合、undefinedが含まれるURLが生成され、WebSocketの接続が失敗します。