なひです.

> 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でも使いたいんですが...
「いやまぁ既に動いてるものもあるし」なんて弱気.^^;