0

特定のアクセス ネットワークで SockJS を使用しているときに問題が発生しました。これは、SockJS がネットワークの状態に応じて最適なトランスポート プロトコル (websocket、ロング ポーリングなど) を選択する方法に関連していると考えられます。

Web ブラウザーを使用して、私の SockJS クライアントは Websocket トランスポート プロトコルを使用してノード SockJS サーバーに接続されます。ノードで「接続中」イベントも表示されます。ただし、データを送信すると、何も通過しません。網羅的に言うと、他のアクセス ネットワークからは完全に機能します。

Web サイトhttp://websocketstest.com/の結果によると、このアクセス ネットワークの状態は少し特殊です。

Connected       Yes✔
Data Receive    Yes✔

Websocket が正常に機能することを確認するには、テスト サーバーによって毎秒更新される "Server time" 行も必要です。そうではないので、websocket 接続を切断する透過的な HTTP プロキシがあると確信しています。

ただし、SockJS はそれを検出せず、フォールバック プロトコルに切り替えません。そうするために設計されたものだと思いました。

SockJS のトランスポート ネゴシエーション機能について誤解していますか?

Socket.IOこの種のシナリオまたは透過的な HTTP プロキシを使用するこの種のアクセス ネットワークでは、より堅牢ですか?

SSL で SockJS を使用できることはわかっていますが、これはむしろフォールバックであり、実際の解決策ではないと思います。

4

1 に答える 1

1

SockJS のトランスポート ネゴシエーション機能について誤解していると思います。SockJS は WebSocket エミュレーションです。SockJS は websocket のように動作します。実際、Websocket がクライアントによってサポートされている場合は、それらが使用されます。しかしもちろん、SockJS が処理する Websocket をサポートしていないブラウザーもあります。フォールバック メカニズムは、ネットワークでサポートされているトランスポートではなく、クライアントでサポートされているトランスポートを見つけるために使用されます。

SockJS が接続に成功するまでトランスポートを繰り返し処理するという事実は、SockJS が何をしようとしているのかについて誤解を招くようなものです。Websocket が接続されているかのように見える方法でネットワークが Websocket を切断する状況や、(接続ステータスを読み取ることによって) 接続されているように見えるがデータが通過しない他のトランスポートは処理しません。

あなたは、データがネットワークを通過することを保証する責任があり、これが意図したものである場合は接続を維持する責任もあります. これらは websockets の範囲外であり、したがって SockJS の範囲外です。

于 2014-02-05T17:54:16.233 に答える