なひです. > From: TAKAHASHI Masayoshi [mailto:maki / inac.co.jp] > Sent: Sunday, June 06, 1999 12:13 AM > > > ・やっぱ並行でエージェントとばしたい。 > > > (結構時間がかかる。遅い時だと現在49ドメインで3分くらいかかったりする。 > > > HEADリクエストだけなのに) > > > > ネットワークへの負荷を考えると,どのくらい平行に動かすのが > > 最適なのかは,悩みどころですよね. > > うーん、HEADだけしか飛ばさないのと、プロセスは1個ですませる > ということなので、ばしばし並行させたい、という欲望はあるの > ですが(^^; なるほど.ネットワークや稼動ホストへの負荷よりも, 一回の実行時間の短さの方が重要であるような用途, ということなんですね. > > > 最初はhttp-accessを使ってみたのですが、どうもコネクションを張った > > > ままrequestするのがうまくいきませんでした(毎回closeしてopenしなおせば > > > OKでした)。 > これ、いろいろいじったら、原因がすこし分かりました。 > HTTP/1.0なサーバに対して失敗するようです。 > > http-accessでは、request_head などを実行すると、@statusが > INITであればあらためてconnectするのですが、今のところ > closeしなければINITになりません。 > > なので、request_headを何度か送ろうとすると、一度目はいいんですが、 > 二度目はconnectをやり直しません。HTTP/1.1対応のサーバに対しては > それで構わないのですが、HTTP/1.0のサーバはKeep-Aliveできないので、 > 失敗してしまいます。どうしたものか。 なるほど,そういうことなんですね. ソケットの読み出し処理が終了した時点でcloseを呼べばよさそうだけど... get_responseの中じゃまずいので... どっか(request)でMETHOD(HEAD/GET)を覚えておいて, get_header/get_bodyの最後で, @next_connectionがfalseならclose. で,どうでしょうか.べたべたでかっこわるいかも.^^; テスト環境がない(未だにHTTP/1.0のサイトってどこだろう ^^;)ので, patchは出し(せ)ません. あと前橋さん.url-parse.rbのほうで, foo.bar:8080なんてのにも対応してあると嬉しいかもしれません. さらにさらに.世の中にはResponse Header区切りが「\nだけ」なんて サーバもありますので,CRLF決め打ちだとハマるかも. ただしこれは,サーバの方が悪いので, コメントに「そんなサーバ知らないよ」と書いとくだけでいいと思います. # なひはハマりました.^^;