なひです. > From: TAKAHASHI Masayoshi [mailto:maki / inac.co.jp] > Sent: Tuesday, June 01, 1999 12:46 PM > # というわけで、ruby-listで振り直しです(^^; わざわざ振り直して頂いたのに,お返事が遅くてすいません.^^; > ええっと、WWWページの更新時刻を取得するエージェントが > ほしいと思いまして……とりあえずPerlのLWP::Simpleで > 書いてみたものの、 > > ・やっぱ並行でエージェントとばしたい。 > (結構時間がかかる。遅い時だと現在49ドメインで3分くらいかかったりする。 > HEADリクエストだけなのに) ネットワークへの負荷を考えると,どのくらい平行に動かすのが 最適なのかは,悩みどころですよね. 「Linkavailable: Ruby」http://www.jin.gr.jp/~nahi/link-Ruby.html のエイジェントは現在6プロセスが平行に動いているんですが, 約170ドキュメントの更新時間チェックに,平均90秒くらいです. 単純に6倍すると...9分ですか. > ・同じホストへのリクエストは一回の接続でまとめて取得するべき。 そう思います.HTTP/1.1で接続しておきながら 毎度セッションを張り直すのは,非常にかっこわるいです.俺だ(涙 > そこで、Connection: Keep-Alive (というかHTTP/1.1)に対応した > HTTPクライアントのRubyライブラリを試してみました。試したのは > 二つです。 > > 1.http-access (前橋さん作成、contribにあります) > 2.KNClient (なひさん作成、「るびゐ、あり□」 > ( http://www.jin.gr.jp/~nahi/Ruby/ruby.shtml#KNClient ) > にあります) えーと,KNClientは,それを目指して作り始めたものの, Persistent Connectionsには対応してません. 現時点で対応済みなのは,前橋さんのhttp-accessだけじゃないでしょうか. さらに言えば,KNClientは,複数行にまたがるHTTPヘッダにも 対応してません(http-accessは対応してます). ちゃんと書いてなくてごめんなさい. というわけで,現時点では, http-accessを(必要なら)修正して使うのがベストだと思います. > 最初はhttp-accessを使ってみたのですが、どうもコネクションを張った > ままrequestするのがうまくいきませんでした(毎回closeしてopenしなおせば > OKでした)。 以前のスレッドをちゃんと追いかけてなかったのですが, どういう現象なんでしょうか. 一応中は眺めた(はず ^^; な)ので,現象の発生する スクリプトとか見せてもらえれば,調査できるかもしれません. できないかもしれません. > で、KNClientでは、どうやら私の使いたいのはKNSession クラスのようなの > ですが、それは「# not implemented. ^^;」ということらしい(^^;;のでした。 はいその通りなんです.^^; / / / 以後,いいわけです.^^; Keep-Alive対応を考えていたんですが, ちょっとあのままでは具合が悪いことに気づき, 一から設計し直したりしてました. 現在作成中のモノでは, include 'Inet::Constants' userAgent = 'KinofingerCLIENT' proto = Protocol.new( 'HTTP/1.1' ) accepts = Accepts.new( 'text/html', 'img/gif', '*/*' ) proxy = Proxy.new( 'localhost', 8080 ) cache = Cache.new() cookies = Cookies.new() anAgent = Inet::Client.new( userAgent, proto, accepts, proxy, cache, cookies ) flag = Connection::CONNECTION_REUSE | Connection::FORCE_RELOAD | Connection::NO_CACHE extensionHeader = "If-Modified-Since: Sat, 15 May 1999 19:56:42 JST\n" << "Content-Transfer-Encoding: 7bit\n" uri = 'http://www.jin.gr.jp/~nahi/' aFile1 = anAgent.get( uri, flag, extensionHeader ) site = 'http://www.jin.gr.jp/' relativePath = [ '/~nahi/', '/~nahi/Ruby/' ] aConn = anAgent.open( site, flag, extensionHeader ) aConn.get( relativePath ) do |aFile2| p aFile2 end anAgent.close() なんて呼び出せるようになるといいなぁ,なんて夢想してます. CacheやCookiesの実装方法なんて,現時点では全然考えてませんが.^^; 本業で使うつもりだったんですが,そちらで用がなくなって 中断したまま...Linkavailableでも使いたいんですが... 「いやまぁ既に動いてるものもあるし」なんて弱気.^^;