WebSocketの接続切れたら再接続したい。
ws.readyState
を見て再接続すれば良いみたいだが、どのような状態をとるのか?
参考資料
どうやら、
- connecting (0): 接続しようとしているが、まだつながってない
- open (1): つながってる
- closing (2): 切ろうとしている
- closed (3): 切れた
ということのようだ。
状態遷移こんな感じ?
WebSocketのreadyState、これであってるのだろうか?どんな流れで変わるのか?自分の理解のために絵を書いてみた。
。。。。違ってるかも。
もし違ってたら誰かツッコミ頂けると助かります。気づいたら教えてください。お願いします。
検討したこと
ブラウザを動かしてるマシンの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"を返信してもらうことでポーリングすることにした。
シンプルなので、各種デモに結構便利に使っている。