LoginSignup
44
34

More than 5 years have passed since last update.

WebSocketの接続切れたら再接続したい

Last updated at Posted at 2015-03-17

WebSocketの接続切れたら再接続したい。
ws.readyStateを見て再接続すれば良いみたいだが、どのような状態をとるのか?

参考資料

WebSocket API 日本語訳

どうやら、

  • connecting (0): 接続しようとしているが、まだつながってない
  • open (1): つながってる
  • closing (2): 切ろうとしている
  • closed (3): 切れた

ということのようだ。

状態遷移こんな感じ?

WebSocketのreadyState、これであってるのだろうか?どんな流れで変わるのか?自分の理解のために絵を書いてみた。

state

。。。。違ってるかも。

もし違ってたら誰かツッコミ頂けると助かります。気づいたら教えてください。お願いします。

検討したこと

ブラウザを動かしてるマシンのWIFI叩き切っても1分くらいreadyStateが1のままだったりするので困る。

navigator.onLineを併用することにした。

navigator.onLineはonlineでもネットに繋がらないことがある

navigator.onLineだけでは、例えばWIFIテザリングしてる先のスマホがたまたま圏外でネットに繋がらないよ。といった時は結局判らないので、サーバーへpollingすることにした。

tadfmac/poorws

検討結果を生かしてWebSocketが切れても再接続するシンプルなライブラリtadfmac/poorwsを作った。
Ping/PongフレームはWebアプリから送信できないみたいなので(コメント欄参照)、ws.send("ping") を送信し、サーバー側からもmessageで"ack"を返信してもらうことでポーリングすることにした。

シンプルなので、各種デモに結構便利に使っている。

44
34
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
34