- - PR -
ネットワークの切断の検知方法について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-06 01:23
こんにちわ,何度か質問させていただいております。
唐竹と申します。 現在,検索ロボットを作っている最中です。 基幹部分はほとんど完成しているのですが,一人ではどうにも分からない部分があります。 学校での運用を考えているのですが,私の学校は非常にネットワークの環境が悪く, 日に三度四度切断されてしまう,レスポンスが極度に悪くなるというのが日常茶飯事です。 長期間検索を行いたいので, 「ネットワークが極端に遅くなるorネットワークが落ちているとき検索を一時停止し, ネットワークが回復したら検索を再開する」という部分を作りたいのですが, なかなか上手くいきません。 現在,「専用のスレッドを立てて,30秒に一回特定の落ちなそうなサイト(例えばgoogle)に 接続し,接続可能ならば検索を続行,接続不可能ならば検索停止する」という処理を 実装してみたのですが,これでは以下のような問題があるように思いました。 ○googleに対する接続要求が増えすぎ,ネットワークに無駄な負荷をかけているのではないか ○googleに接続できても,他のほとんどのURLに接続できない場合がある気がする(気のせいかもしれません) 私としては,常時稼働するのならば一番目の問題が非常にまずいかなと思っています。 現在はソケットを用いてgoogleに接続してタイムアウト時間を30秒に設定し, タイムアウト例外が出れば,ネットワークは落ちていると判断しています。 できるだけネットワークに負荷をかけずにネットワークの状態を検知するにはどうしたらいいでしょうか? このままの方向で行っても特に問題ないでしょうか? ご意見等,よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2005-08-06 02:06
そんなネットワークの環境が悪い所で検索ロボットを動かして、管理者からクレームとか無いですか?(^^;
ネットワークが正常に機能しているか否かを正確に判定するには、実際にネットワークを利用してみる以外にありません。私ならGoogleに・・・などと言わず、本来繋ぐべきサイト(検索対象)への接続を試みるでしょう。接続要求を送った後は、単純に接続応答を待つだけなので、ネットワークへの負荷は高くないはずです。
とりあえず管理者に了承を得ていないなら、早い段階で許可を得といた方が良いと思いますよ〜。帯域制限を行ってくださいと言われるかも知れないし、研究予算で別に回線を用意してくださいと言われるかも知れないけど・・・。 | ||||||||||||
|
投稿日時: 2005-08-12 15:47
検索ロボットで統計を取って「タイムアウトが連発した」とか「レスポンスの平均が○秒を超えた」など、定めておいた"しきい値"を超えた時に一時停止するようにしたらどうでしょう?
Googleなど特定の接続先との状態で判断する必要は無いと思います。(理由は甕星さんコメントの通りです) | ||||||||||||
|
投稿日時: 2005-08-15 10:16
>甕星さま
お返事ありがとうございます。
本来つなぐべきサイトへの接続を試みると,そのサイトがあるサーバだけがたまたま落ちていた場合に対応できないのかなと思っています。なので,確実に落ちないと思われるgoogleへの接続を使ってみました。
ご忠告ありがとうございます。早々に管理者に相談してみようと思います。 今のところ,特に問題はないようです。 夏休みなので,あまりネットワークが使われていないのかもしれません。 >Desmoさま お返事ありがとうございます。
タイムアウトの回数を,規定の時間で割った値を作り,これに閾を設けて対応してみようかなと思っています。 ありがとうございました。 | ||||||||||||
|
投稿日時: 2005-08-15 15:52
遅レスですみませんが・・・
JDK1.5から、JavaでICMP Pingが打てるようになっていますので、これを使って 相手サーバーが生きているかどうかのチェックができますよ。 いきなりHTTP接続はコストが大きいということでしたら、役に立つかもしれません。 |
1