Casablanca(C++ REST SDK)を使ってWin/Mac用のWebSocket通信処理を書いています。
WebSocketが切れてしまった場合にはすぐに再接続をかけることで不安定な通信環境にも強くしようとしているのですが、思った通りに動かない点があり困っています。
うまく動かないというのは、NWが切れたとき(WiFiをオフにしたときや、LANケーブルを抜いたとき)に何のイベントも発生せず、従って再接続処理を動かせないということです。
イベントが発生しないというのは、実際にはWebSocket接続が生きたままだということを意味していて、だからLANケーブルを挿し直すと通信は再開します。それで良いじゃないかと言われるとそれは微妙でして、例えばWi-Fiが切れたらすぐに4Gを使って再接続したいのに無駄に生きているWebSocket接続がじっとWi-Fiの復旧を待ち続けて何も報告してこないので4Gで再接続する処理が始められないということになるので困るのです。
NWが切れたとき、
- set_close_handler でセットしたハンドラは呼ばれません(OS X環境だと、切れて2分くらいしたらやっと呼ばれました)。
- send でメッセージを送ろうとしても例外は吐かれることなく成功してしまいます。送信タスクのwait()もすぐ終わります。(こちらも、切れて2分くらいしたら例外を吐くようになります)
ポーリング的な手段でも良いので、何かWebSocket再接続を必要とする状況を検知する方法はないものでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/31 01:22