In message <20020827130711.011063b7.keita@kyomu.info>,
`keita yamaguchi <keita@kyomu.info>' wrote:
> > ええと、これは WEBrick 側で何もしなくても利用者側で require す
> > ればよいということですね。
>
> そうです。
> require するだけなのでユーザが速度が気になる場合のみ
> 各自timeouxを使うようにすればいいんだと思います。
>
> ただ、必ずwebrickのあとにロードする必要がありますねえ。
勘違いしてなければ、timeoutx.rb から require 'timeout.rb' して
るので、どっちが先でもよいように思います。
> > > * zero copy
> > # … FreeBSD のは Linux と API が微妙に違いますが、HP-UX はど
> > # うなんでしょ。
>
> これ困ってます。
> sendfileには移植性がないとされているようで、
> 各OSでほとんど共通性がないみたいです。
(snip)
> こんな状況なので、各OSを持っている人にインターフェイスを書いて
> もらうしかないような気がします。
Apache2 のようにそれぞれ実装することになるのでしょうね。
> > API としては、body に IO をセットしたら、そこから少しずつ読み
> > 取って送信するという感じにするつもりだったんですが、まさに
> > sendfile はぴったりですねえ。webrick-accelarator もそのほうが
> > 書きやすそうだし。
> >
> > うーん、どうしましょ。
>
> windowsでzero copyする方法がみつからないので(Apacheを参考にすればいい?)
> APIとしてはこの方法を採られるのがいいと思います。
> acceleratorはどのみちメソッドの再定義でゴマかしてますので、
> どれだけ仕様変更があっても追従できると思いますし。
>
> 今後他にも色々手を加えようかなと考えてますので、
> webrick本体は自由に発展してもらって
> こっちは徹底的にメソッド再定義で追従していこうと思っています。
とりあえず、CVS版では HTTPResponse に手を入れて、ボディが IO
のときは _send_file() というメソッドを呼ぶようにしてみました。
しかし、書いてから気付いたんですが、
http://www.FreeBSD.org/cgi/man.cgi?query=sendfile&manpath=Red+Hat+Linux%2Fi386+7.3
あたりを見ると、
Presently the descriptor from which data is read cannot
correspond to a socket, it must correspond to a file which
supports mmap()-like operations.
と書いてあったりします。もしかして、File と IO で挙動を分けた
ほうがよかったりするんですかねえ。
あと、HP-UX や FreeBSD のマニュアルによれば、バイト数に 0 を指
定すると EOF まで転送すると書かれていて、納得の仕様なんですが、
Solaris や Linux のマニュアルからは読み取れませんでした。
わからないことが多いので、ぼちぼちやっていこうと思います。
--
ごとうゆうぞう