2012年4月12日木曜日

websocketについて再度やってみる。その5

jsdo.itにwebSocketを利用したチャットプログラムをぱぱっとおいてあります。
http://jsdo.it/poepoemix/rVsV こんな感じ

んで、本日1日webSocketの挙動、特に3Gではどうなるだの、裏で起動しておくとどうなるだのといったことを調べたのでブログに残しておきます。

利用したのは、手持ちのiPhone4S端末。キャリアはAUです。

まずは3Gの動作について。
・特に問題ありませんでした。3GでもそのままwebSocketはつながるし、問題なくデータのやり取りができました。
・Wifi環境から3G環境に切り替わったときにどうなるかは不明です。

続いてバックグラウンド実行等の話。
・普通にsafariでwebSocketに接続したまま、他のアプリをつかったり、他のタブにいっても、接続が落ちることはありませんでした。
この状態の場合は、webSocketはつながったまま通信をしているようですがjavascript自体は動作せず。バッファがたまっていくみたいな印象でした。
そしてページにもどってきたら、いままでのデータがいっきに吐き出されるといった感じ
このバッファがたまりすぎると、戻ったときにページのリロードがはしってしまうようです。

・続いてスリープ状態にした場合。この場合はwebSocketはいったん切れるみたいです。

最期に、ずっと接続したまま放置したらどうなるか・・・
Safari系はnight build以外では、hybi00で動作するみたいです。
このモードでは、pingについての記述がありません。なので、接続はidle状態になるものと思われます。
僕のつくったRed5のWebSocketプラグインでは、通信がまったくない場合は切断されるようになっているので、ほっとくといつの間にか接続がおちるみたいです。

回避したい場合は、intervalあたりをつかって一定時間ごとに適当なダミーメッセージを送る必要があるとおもいます。
なお、この切れる動作ですが、oncloseのイベントを監視しているのですが、イベントが走らずにきれることがあるみたいです。裏にまわっていて、jsが動作しなかった?疑惑がありますが・・・

rfc6455の方ではpingとpongが定義されているので、ブラウザが勝手に通信してくれるかもしれませんね。調査はしていませんけど・・・

以上、今日調べた結果です。

0 件のコメント:

コメントを投稿