iOSおよびAndroidの標準ブラウザでも軽快に動く、リアルタイムなWebアプリ(チャットや、Googleドキュメントのような共同編集作業用のページ) を作るにはどうすればよいでしょうか?

WebSocketが使えればいいのですが、スマートフォンの標準ブラウザは対応していないそうですね。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/09/28 03:38:57
  • 終了:2012/10/05 03:40:03

ベストアンサー

id:Kanasansoft No.2

Kanasansoft回答回数2ベストアンサー獲得回数12012/09/28 09:11:37スマートフォンから投稿

ポイント33pt

リアルタイムWebの環境は、随分と整ってきてはいますが、まだ過渡期のためどこかで割り切りが必要です。
ご質問の内容からでは、詳細がわかりかねるため、判断材料になりそうな事柄を列挙します。

= スマートフォンのWebSocket対応について =
iOSは、4.2.1以降でWebSocketに対応していますが、ドラフト版のhybi-00というバージョンになります。hybi-00では、テキストデータの送受信は可能ですが、バイナリデータには対応していないため、Base64化する等の工夫が必要です。また、死活監視に利用できるping/pong frameには対応していません。iOS6のSafariでは、RFC版のWebSocketが使えるようになっています。
Androidの4.0までの標準ブラウザは、ご質問にある通りWebSocketには対応していません。しかし、4.1以降はRFC版のWebSocketに対応したChromeが標準ブラウザになります。

= リアルタイムの定義と負荷について =
一概にリアルタイムと言っても、定義は人によりニュアンスが異なります。
33ms(=30fps)以下の場合もありますし、数百msや1秒前後のこともあります。
33ms以下は現時点のインターネットとスマートフォンのブラウザでは、不可能なのではないかというのが、私の個人的な理解です。
数百ms前後であれば、WebSocket一択かと思います。
1秒前後まで妥協できるのであれば、Cometも視野に入ってきます。
ただしCometは、WebSocketに比べて通信量が非常に多く、サーバ負荷も高いため、送受信するデータ量や送受信頻度には気をつけて下さい。

= フォールバックについて =
WebSocketに対応しているブラウザならWebSocketを、対応していないブラウザではCometを使う、このような処理をフォールバックと言います。
サーバの環境が限定されてしまいますが、node.jsというサーバ上で使えるsocket.ioなら、フォールバックが可能です。
node.jsを使う場合、サーバ側をJavaScriptで実装する必要がありますが、手軽にコーディングできるため、人気急上昇中です。
私は、JavaのJettyというサーバ兼ライブラリを好んで使っています。NIOに対応しており、高い負荷にもよく耐えてくれます。私はフォールバックを余り好んで使わないためそのまま使っていますが、Jetty上で使えるcometdという仕組みなら確かフォールバックに対応していたはずです(要確認)。
フォールバックされるとComet等になってしまうため、負荷には気をつけて下さい。
node.jsやJetty以外にも多くのサーバがWebSocketに対応してきているため、ご自身の環境に合わせて選択して下さい。

id:delighter

おおおありがとうございます!!
まさに求めていた回答でした。
自分で調べると、なかなか纏まった情報が得られなくて。

2012/10/13 06:05:44

その他の回答(2件)

id:pigmon88 No.1

pigmon88回答回数501ベストアンサー獲得回数252012/09/28 04:29:09

ポイント34pt

有料ですが、このサービスでできるようですね。

http://www.boomo.jp/

id:delighter

すみません、ちょっと限定的すぎて…

2012/10/13 06:03:33
id:Kanasansoft No.2

Kanasansoft回答回数2ベストアンサー獲得回数12012/09/28 09:11:37スマートフォンから投稿ここでベストアンサー

ポイント33pt

リアルタイムWebの環境は、随分と整ってきてはいますが、まだ過渡期のためどこかで割り切りが必要です。
ご質問の内容からでは、詳細がわかりかねるため、判断材料になりそうな事柄を列挙します。

= スマートフォンのWebSocket対応について =
iOSは、4.2.1以降でWebSocketに対応していますが、ドラフト版のhybi-00というバージョンになります。hybi-00では、テキストデータの送受信は可能ですが、バイナリデータには対応していないため、Base64化する等の工夫が必要です。また、死活監視に利用できるping/pong frameには対応していません。iOS6のSafariでは、RFC版のWebSocketが使えるようになっています。
Androidの4.0までの標準ブラウザは、ご質問にある通りWebSocketには対応していません。しかし、4.1以降はRFC版のWebSocketに対応したChromeが標準ブラウザになります。

= リアルタイムの定義と負荷について =
一概にリアルタイムと言っても、定義は人によりニュアンスが異なります。
33ms(=30fps)以下の場合もありますし、数百msや1秒前後のこともあります。
33ms以下は現時点のインターネットとスマートフォンのブラウザでは、不可能なのではないかというのが、私の個人的な理解です。
数百ms前後であれば、WebSocket一択かと思います。
1秒前後まで妥協できるのであれば、Cometも視野に入ってきます。
ただしCometは、WebSocketに比べて通信量が非常に多く、サーバ負荷も高いため、送受信するデータ量や送受信頻度には気をつけて下さい。

= フォールバックについて =
WebSocketに対応しているブラウザならWebSocketを、対応していないブラウザではCometを使う、このような処理をフォールバックと言います。
サーバの環境が限定されてしまいますが、node.jsというサーバ上で使えるsocket.ioなら、フォールバックが可能です。
node.jsを使う場合、サーバ側をJavaScriptで実装する必要がありますが、手軽にコーディングできるため、人気急上昇中です。
私は、JavaのJettyというサーバ兼ライブラリを好んで使っています。NIOに対応しており、高い負荷にもよく耐えてくれます。私はフォールバックを余り好んで使わないためそのまま使っていますが、Jetty上で使えるcometdという仕組みなら確かフォールバックに対応していたはずです(要確認)。
フォールバックされるとComet等になってしまうため、負荷には気をつけて下さい。
node.jsやJetty以外にも多くのサーバがWebSocketに対応してきているため、ご自身の環境に合わせて選択して下さい。

id:delighter

おおおありがとうございます!!
まさに求めていた回答でした。
自分で調べると、なかなか纏まった情報が得られなくて。

2012/10/13 06:05:44
id:maya70828 No.3

楽1978回答回数1364ベストアンサー獲得回数1392012/10/04 07:04:43

id:delighter

はい、こういうのです!
後者のurlが見れませんでしたが…

2012/10/13 06:07:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません