Cyberroam 接続の背後にあるfm.websyncで非常に奇妙な問題に直面しています。
このライブラリは websockets に接続し、そのチャネルの onRecieve ハンドラーは、サーバーからメッセージを受信します。
通常のネットワークでは、websocket 接続 (HTTP101 要求) は永続的なままで、メッセージを受信できます。
ファイアウォールの背後で、javascript コードがチャネル サブスクライブの onSuccess ハンドラに到達しますが、メッセージは受信されません。Chrome ブラウザー タブを調べると、websocket 接続要求が (永久に保留状態ではなく) 完了状態になっていることがわかります。
これはファイアウォールに問題があることを認識しており、この質問はそれに対処していますが、プログラムでこの状態を判断する方法があるかどうか疑問に思っていました. 基本的には、websocket が正常に動作していない場合に http ポーリングに切り替えます。
私が考えることができる 1 つの解決策は、グローバル フラグを保持し、onRecieve ハンドラーで true に設定することです。また、チャネルがサブスクライブする前にタイムアウト関数 (2 ~ 3 秒) を初期化して、フラグが true かどうかを確認し、そうでない場合はフォールバックします。よりきちんとした、時間に依存しない (遅延に依存しない) アプローチを楽しみにしています。