2013-10-10 4 views
41

Websocketsが閉じられた理由を知りたいので、ユーザーに適切なメッセージを表示できます。websocketsがクローズコードでクローズされた理由を取得する1006

私は、コードは常に1006で、理由は "" 常に

sok.onerror=function (evt) 
    {//since there is an error, sockets will close so... 
     sok.onclose=function(e){ 
      console.log("WebSocket Error: " , e);} 

を持っています。しかし、私は別の閉鎖理由を別に伝えたい。

たとえば、コマンドラインにはエラーの理由があります。「データベースは削除されないため、削除できません」。しかし、Chromeのコンソールでは、理由はまだ ""です。

別の閉鎖理由を区別する他の方法はありますか?

答えて

69

Close Code 1006は、ブラウザの実装によって接続が異常(ローカル)に閉じられたことを示す特別なコードです。

ブラウザのクライアントが終了コード1006を報告している場合は、詳細はwebsocket.onerror(evt)イベントをご覧ください。

しかし、クロムはJavaScriptの面でクローズコード1006の理由をめったに報告しません。これは、WebSocketの乱用を防ぐためのWebSocket仕様のクライアントセキュリティルールが原因と考えられます。 (宛先サーバー上の開いているポートをスキャンするため、またはサービス拒否攻撃のための多数の接続を生成するなど)。

WebsocketへのHTTPアップグレード中にエラーが発生した場合、クロムはしばしばクローズコード1006を報告します(これはwebsocketが技術的に「接続済み」になる前のステップです)。認証や認可が悪い、プロトコルの使用が悪い(サブプロトコルを要求しているが、サーバー自体が同じサブプロトコルをサポートしていないなど)、またはWebSocketではないサーバーの場所と通信しようとする試みそのようなあなたが近いコード1006を見れば、あなたは本当に)または「ソケットエラー」「ファイルを開くことができません」と類似のWebSocket自体(、と非常に低いレベルのエラーを持って、基本的に)ws://images.google.com/に接続するために

をしようとしてあなたのコードと実装の低レベルの問題を指しているので、ユーザーのためのものです。あなたの低レベルの問題を修正し、あなたが接続されたら、より合理的なエラーコードを含めることができます。これは、プロジェクトの範囲または重大度の観点から行うことができます。例:infoおよびwarningレベルは、プロジェクトの特定のプロトコルの一部であり、接続を終了させません。重大または致命的なメッセージが報告されている場合は、プロジェクトのプロトコルを使用して詳細を伝えてから、websocketクローズフローの制限された機能を使用して接続を閉じます。

WebSocketのクローズコードは非常に厳密に定義されており、クローズ理由フレーズ/メッセージの長さは123文字を超えることはできません(これは意図的なWebSocketの制限です)。

しかし、すべてが失われているわけではありません。デバッグの理由でこの情報を必要としているだけであれば、クロージャの詳細と根本的な理由はChromeのjavascriptコンソールでかなり詳細に報告されることがあります。

+2

Joakim、ありがとう、非常に詳細なアンサー。私が 'sok.onerror = function(evt) {console.log(evt);}' を使用すると、詳細はそれほどではありません。 「理由」なんてことさえない。だから、オプションは全くありませんか?私はちょうどユーザーに「何かが間違っているか、または黙っていないのか」を示しています。ユーザーフレンドリーではないので、「データベースの制限の原因は削除できません。オプションは?ありがとう – slevin

+0

'sokを使うべきです。'close event'をトリガーするonclose'を呼び出すと、' reason'と 'code'がその中にあります。 –

+0

@IhabKhattabは、コード固有のものです。 'sok.onclose'は多くのパスで動作しますが、すべてのパスでは動作しません。特に悪いプロトコル、悪いハンドシェイクエラー(近いコード '1006'を引き起こす可能性があるいくつかの条件のような)。これは将来変更されるのでしょうか?多分。しかし、この答えが書かれたとき、それは真実でした。 –

関連する問題