人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

DoJa携帯アプリ側の通信タイムアウト処理をInputStreamが256byteずつ読み込むループの中で
通信開始から1分間応答が無い場合を判定して行っています。
しかし、「サーバから1byteも反応がない」状況だと「256byteずつ読み込むループ」がループ
しない為タイムアウト判定が出来ません。

これを解決するには、別スレッドで時間管理をする方法があると思います。

しかし携帯アプリの容量が既にいっぱいいっぱいな為、なるべく他の方法で解決したいです。

何か良いアイデアがあったら教えてください。

●質問者: kunitz
●カテゴリ:コンピュータ
✍キーワード:アイデア アプリ サーバ スレッド タイムアウト
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● upride
●17ポイント

http://google.co.jp/

Google

urlダミーです

[想像の処理]

通信処理クラス {

もし通信が発生したら {

256kbずつ読込ループ {

一分間通信が途絶えたら {

通信タイムアウト処理 {

エラー表示

}

}

}

}

}

[こんな風にすると良いのではの処理]

通信処理クラス {

・通信が発生してもしなくても処理フラグと開始時間を取得

ループ{

もし通信が発生したら {

256kbずつ読込ループ {

通信が処理時間から1分以上ないなら{

通信タイムアウト処理 {

・エラー表示

}

}

・読込み処理+処理時間取得

}

}

通信が開始時間から1分以上ないなら{

通信タイムアウト処理 {

・エラー表示

}

}

}

}

ものすごく私が勘違いして

イメージ違う場合は勘弁して下さいw

◎質問者からの返答

ありがとうございます!

ループ{

もし通信が発生したら {

256kbずつ読込ループ {

通信が処理時間から1分以上ないなら{

通信タイムアウト処理 {

・エラー表示

}

}

・読込み処理+処理時間取得

→★ここの読込ループの間で「サーバが死ぬ」「通信圏外」なって、

ループが回らなかった場合の事をかんがえています。

}

}

通信が開始時間から1分以上ないなら{

通信タイムアウト処理 {

・エラー表示

}

}

}


2 ● tsekine
●17ポイント

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/net/Socket.html...

Socket (Java 2 プラットフォーム SE v1.4.0)

(int)

DoJa携帯アプリっつーのが分かっていませんが(汗)、要はループの途中で処理がブロックしてしまうのですよね?

read でタイムアウトが発生したら Exception を throw するようにしてあげるだけでは駄目ですか?

◎質問者からの返答

ありがとうございます!

>read でタイムアウトが発生したら Exception

それは、サーバでタイムアウトコードがレスポンスされたということでしょうか?

readでタイムアウトってどうやって判断するんでしょう?


3 ● tsekine
●18ポイント

http://java.sun.com/j2me/docs/pdf/cldc11api.pdf

API の 47 ページ(Acrobat上では53/340)を参照

ちゃんと J2ME CLDC の API リファレンスを読んでみました。

.read() を call する前に .available() で

0 バイトかどうか(データがあるかどうか)チェックし、データがある場合だけ .read() を、そうでない場合は数十ミリ秒 sleep (J2MEでsleepできるかはまだ調べ中)して…

というループにすればよいかと。

調べ方が中途半端ですが、とりあえず。

◎質問者からの返答

ありがとうございます!

>数十ミリ秒 sleep (J2MEでsleepできるかはまだ調べ中)して

なるほどです。

readを何回かループでまわした後、

つまり全体のバイト数のうち途中まで読み込んだ段階でサーバから応答が無くなったら場合の良いアイデアないでしょうか?


4 ● upride
●18ポイント

http://yahoo.co.jp/

Yahoo! JAPAN

★印で、ループで回った「一つ前の読込み処理」の足跡を利用して

タイムアウト判断をすれば宜しいと思います

「足跡の利用例」

一つ前の読込み処理の実行時間と現在時間との差分

一つ前の読込み処理後のバイト数と現在のバイト数の差分

処理ポイントごとにフラグを用意して今どの状態かを把握

うーん。もう3回目は答えられないんですよねぇ

◎質問者からの返答

ありがとうございます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ