なにも知らなかった socket.io
socket.ioを学んでいるわけですが・・・。
接続周りで、右往左往なわけで・・・。
えっと、状態遷移なんか考えていろいろ実装試してみたんだけど・・・。
なんか、いろいろ無駄だったみたい_| ̄|○
恥ずかしい(ツッコミどころ満載)ので、図は小さく小さく。
状態としては、接続開始、接続中、接続終了の3つで、コネクションがなくなったら、タイマーで再試行。。。。
とか、昔ながらのソケット魂発揮してたんですが・・・。
その時、socket.io様は、声をあげてお笑いになった。
http://socket.io/docs/client-api/#
apiを読んでみると(意訳、誤訳、Google翻訳様を駆使)どうも、再接続だってもう実装済みだそうで_| ̄|○
取り敢えず、わからんので接続と再接続周りを実装してみる。
加えて、再接続回数を設定も。
注意:CoffeeScriptです。
$ -> opts = { 'reconnectionAttempts': 3 } socket = io.connect('http://'+location.hostname+':1337/', opts) # 接続 socket.on('connect', () -> $("#log").html($("#log").html() + "<br />" + "connected") ) socket.on('connect_error', (err) -> $("#log").html($("#log").html() + "<br />" + "connect_error -> #{err.message}") ) socket.on('connect_timeout', (obj) -> $("#log").html($("#log").html() + "<br />" + "connect_timeout -> #{obj.message}") ) # 再接続 socket.on('reconnect', (num) -> $("#log").html($("#log").html() + "<br />" + "reconnect #{num}") ) socket.on('reconnect_attempt', () -> $("#log").html($("#log").html() + "<br />" + "reconnect_attempt") ) socket.on('reconnecting', (num) -> $("#log").html($("#log").html() + "<br />" + "reconnecting #{num}") ) socket.on('reconnect_error', (err) -> $("#log").html($("#log").html() + "<br />" + "reconnect_error -> #{err.message}") ) socket.on('reconnect_failed', (obj) -> $("#log").html($("#log").html() + "<br />" + "connect_timeout -> #{obj.message}") )
んで、以下のようにして実験してみる。
- socket.io鯖を起動して通常接続
- 鯖を止める
- 鯖を動かす
- 鯖を止める
- 鯖を動かす
## 通常接続 connected welcome ## 鯖止める reconnect_attempt reconnecting 1 connect_error -> xhr poll error reconnect_error -> xhr poll error reconnect_attempt reconnecting 2 reconnect 2 ## 鯖動かす connected welcome ## 鯖止める reconnect_attempt reconnecting 1 connect_error -> xhr poll error reconnect_error -> xhr poll error reconnect_attempt reconnecting 2 connect_error -> xhr poll error reconnect_error -> xhr poll error reconnect_attempt reconnecting 3 connect_error -> xhr poll error ## 鯖動かす ## 再接続回数三回を超えた為、 ## 再接続はこれ以降起こらない
すっすばらしぃ。
もう、なにもやることないですわ。
でも、一日失ったけど_| ̄|○