2012-07-24 26 views
21

私は次のコードsocket.ioでどのように再接続するのですか?

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

とsocket.ioの接続を作成します。しかし、私は、サーバーCTRL + Cを殺して、再度起動したときに、再接続が起きていません。しかし、クライアント側でイベントを切断する。それはどういう意味ですか?

+0

デフォルトのオプションでは、サーバーを再起動するとすぐにSocket.IOが私に再接続します。オプションを設定せずに何が起こるのを見てみましたか? – Brad

+0

私はオプションを設定しようとしませんでしたが、再接続は起こっていません。 – Dmitro

答えて

0

再接続遅延が500ミリ秒に達していないことを意味します。そのうち50回の再試行回数は500 * 50 = 25000ミリ秒で、つまり25秒です。それがクライアント側のエラーイベントでタイムアウトを設定してソケットオブジェクトを再作成するのに役立たない場合(エラーが発生し、接続を作成するためにいくつかの遅延が再試行された後)

+4

ソケットの文書にあります。私たちは次の再接続のために指数関数的なバックオフアルゴリズムを使用しています。再接続するたびにこの値が乗算されます(500> 1000> 2000> 4000> 8000)。だからそれは25000msより大きくなるでしょう – Dmitro

9

これは古い質問ですが、ソケット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に関するこれらの問題の議論へのリンクです。

reconnection delay - exponential back off not resetting properly

reconnect_failed gets never fired

some potential fixes/workarounds

25

これは、古い質問ですが、socket.io(1.1)に再接続を構成する方法を探している私のような他の人々のためにここには正しい構文があります:

var socket = new io.connect('http://localhost:8181', { 
    'reconnection': true, 
    'reconnectionDelay': 1000, 
    'reconnectionDelayMax' : 5000, 
    'reconnectionAttempts': 5 
}); 
5

これは古いキューです私はv1.4.5を使用しているときに(別の理由で)同じ質問をしました。私のチャットルームのアプリは美しく機能しましたが、端末でCtrl+Cを押すと、私のブラウザはループを続け、シャットダウンするまで数秒ごとにERR_CONNECTION_REFUSEDを報告しました。

以前の回答を変更するだけで解決策が得られました。 v1.4.5のために

、ここでは "VARソケット" のための私の元のコードは、私のクライアントのjsファイルである:

var socket = io(); 

そして、ここでは、ソリューションです:

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

私は変更することができますもし私が望むなら、値は重要ですが、これは決して終わりのない再接続要求を殺したということです。

+0

私は毎秒後にERR_CONNECTION_REFUSEDが現れる同じ振る舞いを経験しています。クライアント再接続の試行がreconnectionAttemptsの指定された値に達した場合、イベントが生成されるかどうかを教えてください。試行回数が確立されていないとクライアントにメッセージを表示したい –

+0

この機能は組み込まれていません。指定された量の再接続試行後にトリガーされるアラートを自分で作成する必要があります。 – elmeltone

+0

まあ私は私の答えを持っているイベント名 "reconnect_failed"が失敗した試行のx回後に発生する。 (https://github.com/socketio/socket.io-client/issues/705) –

関連する問題