4

Socket.io は Java Netty サーバーに接続します。サーバーがダウンしているときに socket.io がサーバーに接続しようとすると、404 が発生します。したがって、Javascript コンソールは次のように述べています。

http://mylocalhost.com/socket.io/1/?t=1354790544338 - Failed to load resource

この後、socket.io 接続は完全に切断されます。その404のため、再接続を試みません...

これをどのように処理すればよいですか?5 秒ごとに接続を試み、サーバーをオンラインにする間隔を設定しようとしましたが、そのエラーのために接続を試みません。

ページのリロード後、正常に動作します。サーバーが再びオンラインになったときに監視して接続する方法は socket.io にありますか? 適切な解決策は何ですか?

socket.io.js クライアントの JavaScript が正しく読み込まれていることを確認しました。何が起こっているのかについての私の理解は次のとおりです。

  1. socket.io がハンドシェイクを開始し、socket.socket.connecting が true に設定されます
  2. サーバーがダウンしているため、http://mylocalhost.com/socket.io/1/?t=1354790544338へのリクエストで404 が発生します
  3. これはエラーですが、socket.socket.connecting は true のままです。これにより、次の再接続試行が失敗します。これは、既に再接続しようとしていると思われる場合は再接続を試行しないためです。

再接続を試みる前に呼び出しを試みましdisconnect()たが、再接続を false に設定しましたが、接続されたソケットがなく、 を呼び出すとdisconnect()、 がスローされ"Cannot call method 'close' of undefined"ます。

次の接続試行の準備ができるように、socket.io を "リセット" して false として再接続するための適切な解決策は何でしょうか?

4

2 に答える 2

-1

リクエストしようとするsocket.ioファイルには、JSで使用する実際のスクリプトが含まれています。このファイルは、Javaサーバーによって提供されます。したがって、このファイルをリクエストすると、ロードに失敗します。そのため、404エラーが表示されます。

ファイルがロードされていないため、そのファイルに由来するソケットに関連するものはすべて利用できません。したがって、実行したいのは、スクリプトファイルがロードされていないときにシナリオをキャッチすることです。ここをチェックしてください:スクリプトを非同期でロードします

したがって、このスクリプトを非同期でロードし、ロード後にステータスを確認する必要があります。失敗した場合、または時間内に応答しなかった場合-リクエストハンドルをフラッシュし、しばらくしてから再度リクエストします。

ファイルが正常にロードされると、JS関数を使用してconnectなどを呼び出すことができます。

于 2012-12-20T14:37:22.650 に答える