← 無料ツール

WebSocket クローズコードと Pusher エラーコード

各コードの意味と対処法:標準の WebSocket クローズコード(1000–1015)と、Pusher プロトコルのエラーコード(4000–4399)。Hibira やほかの Pusher 互換サービスも同じコードを送ります。

Pusher プロトコルのコード

Pusher サーバーは、コードと理由を含む pusher:error メッセージを送ってから、同じコードで接続を閉じます。コードの範囲で、クライアントが次に何をするかが決まります。

  • 4000 SSL only

    このアプリは暗号化された接続しか受け付けません。

    対処: wss:// で接続してください(pusher-js では forceTLS: true)。

    同じ設定では再接続しない
  • 4001 Application does not exist

    このホストに、このキーのアプリはありません。

    対処: アプリキーとホスト(またはクラスター)を確認してください。あるサービスやリージョンのキーは、ほかでは使えません。

    同じ設定では再接続しない
  • 4003 Application disabled

    アプリはありますが、無効になっています。

    対処: ダッシュボードでアプリを有効に戻すか、アカウントの支払い状況を確認してください。

    同じ設定では再接続しない
  • 4004 Over connection quota

    アプリの接続数がプランの上限に達しています。

    対処: ほかの接続が閉じるのを待つ、不要なタブを閉じる、または接続数の多いプランに変えてください。

    同じ設定では再接続しない
  • 4005 Path not found

    URL のパスが /app/APP_KEY になっていません。

    対処: WebSocket のパスを確認してください。プロキシや wsPath の設定ミスがよくある原因です。

    同じ設定では再接続しない
  • 4006 Invalid version string format

    クライアントが送ったバージョンをサーバーが読めません。

    対処: 公式のクライアントライブラリを使うか、URL に protocol=7 を付けてください。

    同じ設定では再接続しない
  • 4007 Unsupported protocol version

    クライアントが求めたプロトコルバージョンに、サーバーが対応していません。

    対処: クライアントライブラリを更新してください。現在のプロトコルは 7 です。

    同じ設定では再接続しない
  • 4008 No protocol version supplied

    URL に protocol パラメーターがありません。

    対処: URL に ?protocol=7 を付けるか、公式のクライアントライブラリを使ってください。

    同じ設定では再接続しない
  • 4009 Connection is unauthorized

    サーバーがこの接続を拒否しました。Hibira では、ページのオリジンが許可されていないことがいちばん多い原因です。

    対処: サイトのオリジン(スキーム、ホスト、ポート)をアプリの許可オリジンに追加してください。切断の前に届く pusher:error メッセージに、どのチェックで失敗したかが書かれています。

    同じ設定では再接続しない
  • 4100 Over capacity

    サーバーが混み合っているか、同じアドレスから一度に接続が多すぎます。

    対処: ほとんどの場合は何もしなくて大丈夫です。クライアントがバックオフして再試行します。何度も起きる場合は、全クライアントが同時に再接続しないようにタイミングをずらしてください。

    バックオフしてから再接続する
  • 4200 Generic reconnect immediately

    サーバーがクライアントに再接続を求めました。たとえばサーバーの再起動中です。

    対処: 何もしなくて大丈夫です。クライアントがすぐに再接続します。

    すぐに再接続する
  • 4201 Pong reply not received

    サーバーが ping を送りましたが、時間内に pong が返ってきませんでした。

    対処: 多くはタブのスリープか、モバイル回線の不調です。自作のクライアントなら、pusher:ping に pusher:pong で応えてください。

    すぐに再接続する
  • 4202 Closed after inactivity

    接続が長い間アイドル状態でした。

    対処: 何もしなくて大丈夫です。クライアントが再接続します。クライアントの activity timeout はサーバーより短くしてください。

    すぐに再接続する
  • 4301 Client event rejected due to rate limit

    この接続がクライアントイベントを短時間に送りすぎたため、1 件が破棄されました(Hibira では 1 日のメッセージ上限に達した場合も)。接続は開いたままです。

    対処: 1 秒あたりのクライアントイベントを減らしてください。たとえば入力中やカーソルのイベントを間引きます。

    接続は開いたまま

標準の WebSocket コード

WebSocket の標準(RFC 6455)で決められたコードで、どの WebSocket サーバーにも当てはまります。

  • 1000 Normal Closure

    接続は意図して閉じられ、処理は完了しています。

    対処: 対処は不要です。

  • 1001 Going Away

    ページが閉じられたか再読み込みされた、またはサーバーが停止中です。

    対処: 対処は不要です。ページやサーバーが戻ったら再接続してください。

  • 1002 Protocol Error

    どちらかが WebSocket プロトコルに反するフレームを送りました。

    対処: 通信を書き換えるプロキシがないか、クライアントとサーバーのライブラリが食い違っていないか確認してください。

  • 1003 Unsupported Data

    相手が受け付けない種類のメッセージです。たとえばテキストしか受け付けないサーバーへのバイナリ。

    対処: サーバーが求める種類で送ってください(Pusher サーバーは JSON テキストを受け付けます)。

  • 1005 No Status Received

    クローズフレームにコードがありませんでした。ブラウザーが報告する値で、実際に送られることはありません。

    対処: このコードだけでは原因はわかりません。サーバーが接続を閉じたときのログを確認してください。

  • 1006 Abnormal Closure

    クローズフレームなしで接続が切れました。ネットワーク、TLS、プロキシ、またはサーバーが接続を終わらせています。ブラウザーが報告する値で、実際に送られることはありません。

    対処: ホストとポート、wss:// と ws:// の使い分け、証明書、プロキシやロードバランサーのアイドルタイムアウトを確認してください(ハートビートは、アイドル接続が切られるより短い間隔で送ります)。ブラウザーでは、多くの場合コンソールに原因が表示されます。

  • 1007 Invalid Frame Payload Data

    テキストメッセージが正しい UTF-8 ではありません。

    対処: テキストを UTF-8 でエンコードするか、バイナリで送ってください。

  • 1008 Policy Violation

    サーバーが独自のルール(認証やオリジンのチェックなど)でメッセージや接続を拒否しました。

    対処: サーバーのルールと、クローズの理由を確認してください。

  • 1009 Message Too Big

    メッセージが相手の受け付けるサイズを超えています。

    対処: メッセージを小さくするか、大きなものは分割してください。

  • 1010 Mandatory Extension

    クライアントが必要とした拡張に、サーバーが同意しませんでした。

    対処: クライアントでその拡張を無効にするか、サーバーで有効にしてください。

  • 1011 Internal Error

    サーバーで予期しないエラーが起きました。

    対処: サーバーのログを確認し、バックオフして再接続してください。

  • 1012 Service Restart

    サーバーが再起動しています。

    対処: 短いランダムな待ち時間のあとで再接続してください。

  • 1013 Try Again Later

    サーバーが一時的に過負荷です。

    対処: バックオフして再接続してください。

  • 1014 Bad Gateway

    ゲートウェイやプロキシが、背後のサーバーから不正な応答を受け取りました。

    対処: プロキシの背後にあるサーバーを確認してください。

  • 1015 TLS Handshake

    TLS ハンドシェイクに失敗しました。たとえばクライアントが信頼しない証明書です。ブラウザーが報告する値で、実際に送られることはありません。

    対処: 証明書チェーン、ホスト名、有効期限を確認してください。

コードの範囲

  • 1000–2999:WebSocket 標準のための予約枠です。このコードはまだ割り当てられていません。
  • 3000–3999:ライブラリやフレームワーク向けの登録枠です。使っているものを確認してください。
  • 4000–4099:このあとクライアントが同じ設定では再接続しない Pusher エラー。
  • 4100–4199:このあとクライアントがバックオフして再接続する Pusher エラー。
  • 4200–4299:このあとクライアントがすぐに再接続する Pusher エラー。
  • 4300–4399:接続を開いたままにする Pusher エラー。
  • 4000–4999:プライベート用途。意味は送ったアプリやサービスが決めます。

購読エラー

プライベートチャンネルやプレゼンスチャンネルの購読に失敗しても接続は閉じず、クライアントには pusher:subscription_error が届きます。そこでの AuthError は、ほとんどの場合、認証エンドポイントが返した署名が合っていません。シークレット、ソケット ID、チャンネル名、channel_data のどれかが署名したときと違います。

署名をチェックする

WebSocket テスターで接続を試す → · メッセージサイズなどの制限 →