Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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"を返信してもらうことでポーリングすることにした。

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

tadfmac
aka D.F.Mac. 実験音楽家。TripArts Music主宰。ハンディーレコーダーでの音集めが趣味。 Web技術、フィジカルコンピューティングなどにも興味があります。
http://soundcloud.com/tadfmac
kddi
KDDIは、通信を中心に周辺ビジネスを拡大する「通信とライフデザインの融合」をより一層推進し、国内はもとよりグローバルにおいても、5G/IoT時代における新たな価値創造を実現し、お客さまの期待を超える新たな体験価値の提供を追求してまいります。
http://www.kddi.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした