なにも知らなかった 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

## 鯖動かす
## 再接続回数三回を超えた為、
## 再接続はこれ以降起こらない

すっすばらしぃ。
もう、なにもやることないですわ。


でも、一日失ったけど_| ̄|○