メインコンテンツまでスキップ

7. Closing the Connection (接続のクローズ)

7.1 Definitions (定義)

7.1.1 Closing the WebSocket Connection (WebSocket接続のクローズ)

WebSocket接続をクローズすることは、基盤となるTCP接続をクローズすることを意味します。

7.1.2 Start the WebSocket Closing Handshake (WebSocketクロージングハンドシェイクの開始)

クロージングハンドシェイクを開始するためにClose制御フレームを送信します。

7.1.3 The WebSocket Closing Handshake is Started (WebSocketクロージングハンドシェイクが開始された)

どちらかのエンドポイントがCloseフレームを送信すると、ハンドシェイクが開始されます。

7.1.4 The WebSocket Connection is Closed (WebSocket接続がクローズされた)

基盤となるTCP接続がクローズされると、接続はクローズされたとみなされます。

7.1.5 The WebSocket Connection Close Code (WebSocket接続クローズコード)

Closeフレームに含まれるステータスコード。

7.1.6 The WebSocket Connection Close Reason (WebSocket接続クローズ理由)

Closeフレーム内のオプションのテキスト理由。

7.1.7 Fail the WebSocket Connection (WebSocket接続の失敗)

エラーのため、Closeフレームを送信せずに直ちに接続をクローズします。

7.2 Abnormal Closures (異常クローズ)

7.2.1 Client-Initiated Closure (クライアント開始のクローズ)

クライアントがエラーを検出した場合、接続をクローズすべきです。

7.2.2 Server-Initiated Closure (サーバー開始のクローズ)

サーバーがエラーを検出した場合、接続をクローズすべきです。

7.2.3 Recovering from Abnormal Closure (異常クローズからの回復)

アプリケーションは再接続メカニズムを実装すべきです。

7.3 Normal Closure of Connections (接続の正常クローズ)

正常クローズプロセス:

  1. 開始側がCloseフレームを送信
  2. 受信側がCloseフレームを受信後、Closeフレームレスポンスを送信
  3. 受信側がTCP接続をクローズ
  4. 開始側もCloseフレーム受信後にTCP接続をクローズ
// クライアント正常クローズ
ws.close(1000, 'Normal closure');

// サーバー側の処理
ws.on('close', (code, reason) => {
console.log(`接続がクローズされました: ${code} - ${reason}`);
});

7.4 Status Codes (ステータスコード)

7.4.1 Defined Status Codes (定義されたステータスコード)

コード名前説明
1000Normal Closure正常クローズ
1001Going Awayエンドポイントの離脱(ページナビゲーションなど)
1002Protocol Errorプロトコルエラー
1003Unsupported Dataサポートされていないデータタイプ
1005No Status Rcvd予約済み、Closeフレームで使用すべきではない
1006Abnormal Closure予約済み、異常な接続クローズを示す
1007Invalid frame payload data無効なフレームペイロードデータ(無効なUTF-8など)
1008Policy Violationポリシー違反
1009Message Too Bigメッセージが大きすぎる
1010Mandatory Ext.クライアントが期待した拡張がネゴシエートされていない
1011Internal Errorサーバー内部エラー
1015TLS handshakeTLSハンドシェイク失敗(予約済み)

7.4.2 Reserved Status Code Ranges (予約済みステータスコード範囲)

  • 0-999: 未使用
  • 1000-2999: プロトコル定義
  • 3000-3999: ライブラリ/フレームワーク使用
  • 4000-4999: アプリケーション使用

Closeフレーム構造

+--------+--------+------------------+
| Status | Reason |
| Code | (オプション) |
| (2バイト)| (UTF-8テキスト) |
+--------+--------+------------------+

参考リンク