32

次のコードで socket.io 接続を作成します

var socket = new io.connect('http://localhost:8181', {
    'reconnect': true,
    'reconnection delay': 500,
    'max reconnection attempts': 50
});

しかし、サーバーCTRL+Cを強制終了して再起動すると、再接続が行われません。ただし、クライアント側で発生する切断イベント。その理由は何でしょうか?

4

4 に答える 4

37

これは古い質問ですが、 socket.io (1.x)で再接続を構成する方法を探している私のような他の人にとって、正しい構文は次のとおりです。

var socket = new io.connect('http://localhost:8181', {
    'reconnection': true,
    'reconnectionDelay': 1000,
    'reconnectionDelayMax' : 5000,
    'reconnectionAttempts': 5
});
于 2014-10-12T23:30:48.337 に答える
11

これは古い質問だと思いますが、ソケットioの再接続に問題があり、この投稿が検索結果の上位にあることがわかったので、貢献したいと思いました。次のコードを使用して、発生しているイベントを正確にデバッグしてみてください。

# coffeescript. compile if you're writing javascript, obviously.

socket.on 'connect',-> console.log 'connected'
socket.on 'reconnect',-> console.log 'reconnect'
socket.on 'connecting',-> console.log 'connecting'
socket.on 'reconnecting',-> console.log 'reconnecting'
socket.on 'connect_failed',-> console.log 'connect failed'
socket.on 'reconnect_failed',-> console.log 'reconnect failed'
socket.on 'close',-> console.log 'close'
socket.on 'disconnect',-> console.log 'disconnect'

これにより、クライアント ソケットの状態をより深く理解できるはずです。

また、Web インスペクターの [ネットワーク] タブを調べて、フォールバックとして XHR リクエストを発行しているかどうかを確認してください。最後に、Web コンソールで io.sockets と入力して展開し、実際に再接続しようとしているかどうかを確認します。

reconnect_failed が起動せず、再接続タリーがリセットされないという問題が発生しました。以下は、github でのこれらの問題の議論へのリンクです。

再接続の遅延 - 指数バックオフが正しくリセットされない

reconnect_failed は起動されません

いくつかの潜在的な修正/回避策

于 2012-10-18T03:50:02.710 に答える
10

これは古い質問ですが、v1.4.5 を使用しているときに (別の理由で) 同じ質問がありました。チャット ルーム アプリは問題なく動作しCtrl+Cましたが、ターミナルにアクセスすると、ブラウザーがループし続け、シャットダウンするまで数秒ごとに ERR_CONNECTION_REFUSED が報告されました。

以前の回答を少し変更すると、解決策が得られました。

v1.4.5 の場合、クライアント js ファイルの「var socket」の元のコードは次のとおりです。

    var socket = io();

そして、ここに解決策があります:

    var socket = io({
        'reconnection': true,
        'reconnectionDelay': 1000,
        'reconnectionDelayMax' : 5000,
        'reconnectionAttempts': 5
    });

明らかに、必要に応じて値を変更できますが、重要な点は、これにより、終わりのない再接続要求が殺されることです。

于 2016-06-14T19:00:30.773 に答える
0

再接続遅延が小さすぎると 500 ミリ秒増加し、さらに 50 回の再試行は 500 * 50 = 25000 ミリ秒、つまり 25 秒を意味します。それでも解決しない場合は、クライアント側でエラー イベントのタイムアウトを設定してソケット オブジェクトを再作成します (エラーの後、接続の作成を再試行します)。

于 2012-07-24T17:09:19.947 に答える