7

ラップトップがスリープ状態になるのはよくあることです。これにより、socket.io クライアントが切断されます。ユーザーが Web アプリに戻ると、socket.io クライアントは再接続を試みません (おそらく再接続の制限に達しましたか?)。ユーザーが何らかのアクションを行った場合にソケットに再接続するように指示するにはどうすればよいですか?

たとえばemit、接続がアクティブかどうかをチェックし、アクティブでない場合は再接続を試行する機能が必要です。

注: クライアント側の JS コードのみが必要で、node.js は使用していません。

4

4 に答える 4

7

バージョン 0.9 では、接続オプション オブジェクトを積極的な設定に設定することができます。

  var main = io.connect('/', {
    'reconnection delay': 100, // defaults to 500
    'reconnection limit': 100, // defaults to Infinity
    'max reconnection attempts': Infinity // defaults to 10
  });

max reconnection attempsこれは、io クライアントが 10 回失敗した後にサーバーへの再接続を停止するという意味ではないことに注意してください。サーバーに 10 回再接続でき、11 回目の接続が失われた場合、再接続を停止します。

Socket.IO 構成を参照してください。

于 2013-02-18T07:28:53.067 に答える
4

Socket インスタンスには内部の「socket」プロパティがあり、これには、呼び出すことができる connect() メソッドがあります。通常、オブジェクトをインスタンス化すると自動的に呼び出されます (「自動接続」オプションで制御)。内側のソケットには、ブール値の「接続済み」プロパティもあり、状態が不明な場合に確認できます。そのようです:

sio = io.connect();
//... time passes ...
if (! sio.socket.connected) {
  sio.connect();
}

connect() メソッドは、ソケットが接続しようとしている途中ではないことを確認しますが、何らかの理由で、ソケットが既に接続されているかどうかを確認しません。すでに接続されているソケットを connect() するとどうなるかわかりません...

クライアント ライブラリのソース コードはかなり明確で、コメントも充実しています。これは、github の READMEがあまり役に立たないため、良い点です。ソースを掘り下げることができるように、開発中にライブラリの縮小されていないバージョンを使用すると便利です。

于 2012-08-01T22:23:33.963 に答える
2

connect.failedイベントの使用を試みることができます:

socket.on('connect_failed', function () {
   /* Insert code to reestablish connection. */
});
于 2012-07-26T10:45:42.557 に答える
-2

次のような接続ステータスをチェックするsetIntervalを実行することができます

s.connect()

if (! s.socket.connected) {
   s.connect();
于 2014-09-26T16:52:41.170 に答える