• 締切済み

androidをjavaで開発しています

XMLparserでレスポンスを読んだり、リクエストを送ったりしています。Webサービスでサーバーとはxmlでやりとりしています。 通信が3Gだと遅く、wi-fiならそれなりのスピードで動くのですが、実際の環境としては3Gで使用されるようなので、どうにかしてチューニングして少しでもスピードを上げたいのですが、 なにかこのたぐいのプログラミング(androidでWebサービスでサーバーとxmlのやりとりをする)のご経験のある方、スピード改善のアドバイスを頂けるとありがたいです。 あれはやってますか?とか、そんな感じでもうれしいですし、ヒント的なことでもなんでも結構ですので、よろしくお願いします。

noname#258812
noname#258812
  • Java
  • 回答数3
  • ありがとう数3

みんなの回答

回答No.3

xmlは随時変更されている? 定番というか当たり前のことだけど随時ではなくてある一定期間あくなら Android側でキャッシュしていて更新されたときにサーバに問い合わせに行くようにする。 更新されたかどうかは内部バージョンを用意してそのバージョンだけを見に行くようにして 更新されてなければ処理はそこで終了させるようにすればいいきが

noname#258812
質問者

お礼

バージョン管理は知らなかったです。androidの通信アプリでは一般的によくつかわれる手法なのですか。今回はオークションのような一般顧客がずいじデータを更新するアプリなので、常に更新されたxmlを取得することになりそうなので、難しそうですが、このやり方はかなり合理的で良いと感じました。次回はぜひこの手法をやってみたいです。アドバイス助かります。ありがとうございます。

回答No.2

アプリで対応できる範囲には限界があるので、 もし、サーバーからのデータ量や、サーバーとの通信経路上に、 ボトルネックがあるようなら、たとえ、サーバーに手を出せないという場合でも、 サーバーを二層構造にするという方法もありますね。 一括データしか取り出せない汎用のXML生成サーバー ↑↓(データが重い) アプリ を 一括データしか取り出せない汎用のXML生成サーバー ↑↓ 必要最低限なXMLデータだけを返す代理サーバー(自前で用意) ↑↓(データが軽くなる) アプリ にするって感じで。 また、さらに、代理サーバーでXMLをキャッシュもするようにすると、効果あるかもしれません。

noname#258812
質問者

お礼

代理サーバーは合理的ですね。ハードウェアなど環境があるならぜひ検討したいです。将来的に考えてみたいです。アドバイスありがとうございます。

回答No.1

問題の切り分けが必要でしょうけど、 XML生成自体が重い場合→XML生成環境の見直し(サーバーアプリの速度改善やサーバーの高速化) XML転送が遅い場合→サーバーの移転。 XMLの転送量が多い場合→XML生成をケース分けしてそのケースの必要最小限のデータのみにする。 その上でも3G回線速度のみが問題になるなら→アプリ側で同じXMLを何度もリクエストしないようにキャッシュする。 アプリによっては逆に細切れでリクエストしないで、予測されるデータを一括で先読みしておく。 って感じでしょうか。 ちなみに、「Androidを開発」でなく、「Androidのアプリを開発」ですね。

noname#258812
質問者

お礼

アドバイスありがとうござます。サーバー側のリソースは変更がきかない状態なので、androidのアプリ側で対応するしかないのですが、requestの回数は極限まで減らす前提ですね。xmlパースロジックやコネクション部分でrequest・responseを効率よく送受信する方法を探るしかない状況です。(><)android版ヤフオクなどが3Gでもかなり快速にうごくので、とても不思議です。やはり、サーバーのスペックが良いからなのですかね。。質問名訂正のご指摘もありたとうございます、たしかにおかいしですね。

関連するQ&A

  • java ネットワークプログラミングの本で

    こんにちは。趣味でプログラミングをしているものです。 さっそくですが、質問させていただきます。 「基礎からわかる TCP/IP Javaネットワークプログラミング」 の第2版の98ページに記載されている、内容をもとに サーバーへ リクエストを送り、 サーバーから レスポンスを受け取るコードを しろうとなりに作ってみたのですが... amazon でネットワークプログラミングの本をみてみると 大体が出版年度が古いものだったのですが... ------------------------------------------------------- DNSネーム : www.google.co.jp port番号 : 80 リクエスト : GET /index.html と入力してから、送信の終了である [ . ]を入力したら eclipseのコマンドプロンプトに レスポンスが返ってきたことはきたのですが、 状態コードが 200でなく302となっており、 通信がうまくいかなかったようなのですが、 ヘッダの詳しい内容というのがわかりません。 返されてきたhtmlの内容を見ると、 どうやら、昔のページにアクセスしたのかな、 と思うぐらいなのですが... ------------------------------------------------------- 以下のURLから2ばんめのリンク先にある テキストファイルにソースコードの全文および 返されてきたレスポンスを載せてありますので よろしければ見ていただきたいのですが... http://www.eonet.ne.jp/~mycabinet その上で、 どのようにすれば、正しいhtmlが返ってくるのでしょうか? ご存知の方、教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • VB.net SOAPメッセージの取得方法

    Webサービスを利用したプログラムを試行錯誤しながら作っています(なかなか進みません)。 以下の件、ご教授ください。 VB,netにて、Web参照を指定して作成したクライアント・アプリケーションで、SOAPの送受信をデバッグするために、Webメソッドを呼出したときのSOAPメッセージ(リクエストとレスポンス)のXMLテキストを画面に表示したいのですが、その取得方法がわからず困っています。 SOAPメッセージ(リクエストとレスポンス)のXMLテキストを取得する方法をご教授ください。 よろしくお願い致します。

  • xmlとjavaで自動的にWEBが更新されるソースを作ろうと思っています

    はじめまして。お忙しいところ申し訳ございませんがお力をお貸しいただきますようお願いいたします。 今度xmlで時間やwebサイトのURLなどを定義しておき、 時間がきたら自動的にページを開いていくプログラムを作ろうとしています。 具体的には <diary>20050613</diary> 日時が2005年6月13日 <time>231530</time> 時間が23時15分30秒に <web>http://www.goo.ne.jp</web> gooを開く というように記述していこうと考えています。 このようなxmlファイルをサーバで配布し、クライアント側で実行できるようなプログラムを作ってみたいと考えているのですが実際にどのような技術を使っていけば良いのか分かりません。自分でも調べてはいっているのですが、なかなかXMLの基礎知識も乏しいため前に進みません。 他のプログラミングはjavaが多少できるのでjavaとxmlを使って作れればと思っています。 何かヒントでも結構ですのでアドバイスお願いいたします。

    • ベストアンサー
    • XML
  • リクエストメッセージ、レスポンスメッセージを見る方法

    webサーバーとクライアントとのやりとりについて勉強したいと思い、リクエストメッセージとレスポンスメッセージを見るためにtelnetを利用してyahooなどへの接続を試みたのですが、telnetでの接続ができません。telnetで接続するには、どうしたらいいでしょうか?また、telnetを利用する以外でリクエストメッセージとレスポンスメッセージを見る方法はないでしょうか?よろしくお願いします。

  • webサーバの使う帯域

    webサーバの(webサーバじゃなくてもいいんですが)使う帯域について質問です。 毎秒1000リクエスト受けるサーバあり、リクエストは一様とだとします。すべてのリクエストに対し、レスポンスは200KBだとします。 ネットワーク回線は十分にあり滞留は発生していないものとします。 このときこのwebサーバが使う上流のトラフィックは 1000 * 200 * 10^3 * 8 bps と考えても差し支えないでしょうか?

  • JBoss の仕組み、開発時に行うべきこと。

    JBoss について質問です。 (JBoss EAP 6.1.0 です) パッケージの修正から再配置までの手順でわからないところがあり困っています。 JBossは未経験なのですが、10年くらい前にApatch + Tomcat で Struts のフレームワークでほんのちょっとだけ開発を行ったことがあります。 開発の流れは、以下のように認識しているのですが、何かしらの手順が抜けていたり、認識が誤っていたりするのでしょうか?? (Eclipseを使っています。) (1)プロジェクトをインポート (2)ソースを修整しコンパイル (3)Warファイルとしてエクスポート (4)%JBOSS_HOME%/server/default/deploy にWarファイルを配置 ****************************************************** このとき、 (1)「Warファイルのエクスポートの仕方」がわかりません。  メニューから選択すると、  パッケージの名前を入れたり、出力先を選択するようなダイアログが出るのですが、  パッケージの名前を入れても、OKボタンが活性にならず、作成ができないのです。 (2)「ソースを修整しコンパイル」をしたときに、  .classファイルはどこかの出力ディレクトリに作られるのでしょうか?  (見当たらないのですが、.classファイルは作られずに、   Warファイルとしてその中に内蔵されるものなのでしょうか)   Warファイルには、    jspファイル  ・・・ プレゼンテーション層    classファイル ・・・ サーブレットや、ファンクション層    jarファイル  ・・・ 複数のclass をパッケージとしてまとめたもの    web.xmlファイル ・・・ 設定ファイル   が含まれているという認識です。   しかし、不思議なのは、   なぜ「server/default/deploy にWarファイルを配置」   で動くのか?というのがわかっていません。   それぞれ、   htmlやjspファイル ⇒ WEB-INFの直下   classファイル ⇒ WEB-INF/classes   jarファイル ⇒ WEB-INF/lib   web.xmlファイル ⇒ WEB-INF/web.xml   に配置すると思います。   そして、   <welcome-file-list>要素配下の、   <welcome-file>に、   index.jsp、index.htmlを配置する認識です。   しかし、わからないのが、   「Warファイル」の形式のまま、   server/default/deploy に置いただけで、    ・WEB-INFの直下    ・WEB-INF/classes    ・WEB-INF/lib    ・WEB-INF/web.xml   には何も置いていないのに、   なぜ動くのでしょうか? (3)リリースは、必ず「Warファイル」でやらなければならないのでしょうか?  「jarファイル」を作る際、jarの中には、web.xml が入っていない認識です。  なので、  「jarファイルの差し替え」を行うときは、   ・クラスのインタフェースが変わっていない時   (.classpath に書かれているクラスのインタフェースに変更がないとき)  に限り、jarファイルの置き換えだけで、プログラムを入れ替えることができるということであっていますでしょうか? (4)プレゼンテーション層としてのトップページとしての「html」と、  そのhtmlから実行されるサーバ処理の「関連付け」はどのような仕組みになっているのでしょうか?   「WEB-INF/web.xml」に記載された、   ウェルカムページというか、TOPページというか、それを経由して、   formコントロール」に Inputの情報を、   HTTP Request として、サーバに送られる認識です。   そのとき、   その「HTTP Request」は、どこで受け取っているのでしょうか??   サーバ上のどこかのクラスで、   なんらかの方法で「HTTP Request」のヘッダ情報を解析し、   「要求された処理」を実際に動かすクラスに、処理を依頼すると思うのですが、   その「HTTP Request」を元に振り分け処理を行っているクラスというのは、   一体、なんというクラスなのでしょうか??   というか、   どのクラスでそれを行うのかは、一体、なんという設定ファイルに記載するのでしょうか?   (.xml ファイルなり、.conf ファイルなり、.ini ファイルなり、    設定系ファイルが多くて中々探せないです。。) (5)サーブレットが処理を終えたら、  クライアントに「HTTP Response」というか、  「HTML」を返す認識ですが合っていますでしょうか? (6)「.project」は、「パッケージ」1個につき1個存在しており、  また「パッケージ」1個につき、「jarファイル」も1個ということで合っていますでしょうか?

    • ベストアンサー
    • Java
  • グローバルIPを持たないWebサーバとXML Webサービスでやりとり。注意点は?

    XML Webサービスのセキュリティについて、質問させてください。 先日、社内限定で利用するXML Webサービスを作成しました。 このWebサービスは.NETで作成しています(SOAP形式)。 現在、社内のWebサーバに、このWebサービスをインストールして利用しています。 インストールしたWebサーバは、グローバルIPを持っていません。 現在、セキュリティ面の考慮は特にせずに、社外秘のデータをWebサービスの通信でやりとりしています。 ここで質問なのですが、グローバルIPを持たないWebサーバと、LAN内のクライアントとのやりとりでも、セキュリティ上でなにか特別な対策をすべきでしょうか? (SSLを構築したりなど) なお、Webサーバもクライアントも、インターネットには接続できる環境です。 以上、どうぞよろしくお願い致します。

  • apacheの起動の件

     前回のホームページの表示の件2の解答の中でapacheの概略を書かれています。これは、webサーバーがwebブラウザからのリクエストの要求を受け取り、分析して、webブラウザにレスポンスを送信するというwebサーバー上の実行と同じです。ということは、webサーバーの実体はapacheというソフトウェアが起動して、wwebブラウザとのやり取りをしているのですか。

  • 電文とは

    現在、プロジェクトでJavaで電文を取り扱うという話を聞いているのですが、イマイチピンと こないので質問させてください。 電文とは「通信プログラムで送受信されるデータ」という記述を某所でみたのですが 電文とはHTTP通信のことでしょうか。Webアプリでリクエストパラメータを送信するとXMLが responseとして返ってくる場合、これは電文のやりとりを行ったことになるのでしょうか。 HTTP通信でない電文はありますでしょうか。

    • ベストアンサー
    • Java
  • リクエストを受けたサーバ以外からのレスポンス

    質問なのですが、 1. ユーザがブラウザAからリクエストXを発行して 2. あるWebサーバBがリクエストXを受け付けて 3. WebサーバBがリクエストXの情報を、別のWebサーバCに渡して 4. WebサーバCがブラウザAへ直接レスポンスを返す。 というのはHTTPの仕様上では可能なのでしょうか? また、WebSocketやWebRTCなどを使えば可能でしょうか? ・WebサーバBとWebサーバCはIPアドレスが異なる前提でお願いします ・言語やフレームワークは無視して、仕様として可能かが知りたいです

専門家に質問してみよう