2017-06-26 13 views
0

これは愚かな質問かもしれませんが、ポーリングの代わりにtransportとしてwebsocketを使用するようにsocket.ioを強制的に再試行する方法があるのでしょうか?ポーリングにフォールバックした後に強制的にアップグレードしますか?

私のアプリケーションがWebSocket接続を確立できないことがあります(ハンドシェイクに失敗しました:ERR_CONNECTION_RESET)。 Socket.ioはポーリングに正しく戻ってしまいますが、たとえうまく機能したとしても、再びWebSocketに戻ってみることはできません。私の見解は正しいですか? もしそうなら、何をお勧めしますか?

コードが必要な場合は教えてください。私は理論的な質問にもっと似ているので、私は実際に関連するコード例を考えることができませんでした。

+0

接続を拒否しないようにサーバーを修正してください。ポーリングモードの場合は、クライアントから接続を切断して再接続すると、自動的にwebSocketが自動的に再試行されます。 – jfriend00

+0

うん。これは、状況を理解するために提供された単なる例でした。明らかに私は最初にハンドシェイクを失敗させたくありません。コメントありがとう! – puelo

+0

時折、ERR_CONNECTION_RESETがwebSocket接続に固有のものではない可能性があります。たぶんあなたのWebサーバーの状態が悪いことの兆候でしょう。これがあなたのサーバーである場合、クライアントコードで回避しようとするのではなく、サーバーが正常に動作するようにすることが重要です。 – jfriend00

答えて

0

Socket.ioは正しくポーリングに戻っていますが、動作しても、再びWebSocketに戻ってみることはできません。私の見解は正しいですか?

はい。

もしそうなら、何をお勧めしますか?

私はlibの仕事を再確立しようと考えていません。サーバーの可用性をチェックする独自のリスナーを設定することができます。サーバーがクラッシュしたり、ユーザーが接続できなくなったことに気づかないことがあります...

私たちがクライアント側に持っているものの例は、

//If sockets close 
    window.ws.onclose = function (e) { 

     ws.onclose = null; 
     ws.onerror = null; 
     ws.onopen = null; 
     // restart sockets in: 3000 ms 
     setTimeout(function() { ctx.createWS(); }, 3000); 
    }; 

    window.ws.onerror = function (error) { 
     //On error we will try to restart sockets in function described before 
     ws.close(); 
    }; 
+0

ありがとうございました。ちょうどそれを追跡することが私の仕事であるという確認をしたかったのです。可能な限り早く受け入れます。 – puelo

関連する問題