Socket.IOのおかしな動作
プルリク出していきたい
切断されたclient側からの再接続
reconnectionDelayで設定できる
デフォルト1000 msec +-ランダムに300msecぐらいで再接続を試行する
再接続できなかった場合、以後5000 msec毎に再接続を試行する
ここはrandom delayが入らず、ぴったり5000 msec
一度切断され再接続したclientは、2度目の切断・再接続でも1回目の再接続が5000 msecになる
5000 msec後に再接続リクエストが殺到するのでは?
フラグ管理に問題がありそうだ
http-polling (comet)での切断検知のドキュメントと実装が違う
websocketではすぐに切断が検知できるので、この問題は起こらない
pingTimeout (Number): how many ms without a pong packet to consider the connection closed (60000)
pingInterval (Number): how many ms before sending a new ping packet (25000).
実際に試すと、サーバーは85秒後にdisconnectを検知する
実装
clientはpingInterval毎にpingを送信する
serverはpingを受けるとpongをすぐ返す
同時に、setTimeout(onClose, pingInterval + pingTimeout)して切断を検知しようとする
次のpingを受けるとclearTimeoutし、またsetTimeoutする
ドキュメントに合わせて実装を直すのが良さそう
85秒は長い
25秒と60秒は、2回pingする(1回失敗する)猶予を持たせた値だと思われるので