Hatena::ブログ(Diary)

gama子log RSSフィード

2008-02-29

polipoのパイプラインについて

・パイプラインというのは持続的な接続を行う事で、再接続時の負荷をなくしましょうという考え方。

Macのネット環境高速化「dolipo」はナゼこんなに速いのか [C!]

ここちょっと違うと思うので自分の理解を書いときます。


パイプラインは「持続的な接続」を行ったうえでさらに、サーバーが応答を返しきる前に次のリクエストを送ることで、リクエストと応答のタイムラグを減らしましょうという考え方です。


はい、おわり。

あとはぐだぐだ書くので、わかってる人はさようなら。ちゃんと知りたい人は、も少しちゃんとした情報をググったりRFC読んでくださいませ。^^



persistentとかkeep-aliveとか言われる「持続的な接続」は、再接続の負荷をなくすために、いちいち接続切らないで続けて次の要求をします。


つまり、

持続的じゃない接続だと

接続-client要求-server応答-切断-接続-client要求-server応答-切断・・・

なのが

接続-client要求-server応答-client要求-server応答-・・・切断

となります。


tcpの接続切断は通信自体の時間もかかるし、OSリソースの取得開放でサーバー負荷もかかるので無ければ無いほうが早いよね。という考え方。


で、さらに一歩進んでパイプラインはというと、ものすごく簡単に書くと

接続-client要求-client要求       ・・・切断
        server応答-server応答-・・・

となります。


パイプライン無しだと、相手に要求・応答を投げた後は、相手の次のアクションをボーっと待つしかなかったんだけど、パイプラインありだと相手からのアクションがどんどん詰まれるので、待ち時間がなくなって早くなるという考え方。


実際は、サーバーが一回目の応答を返さないと、「持続的な接続」ができるかどうかはわからないので、次の要求は出せない。とか細かいことはあるんだけど、だいたいそんな感じだと思います。


ただ、途中の帯域が細くて遅い場合と、サーバーの処理が遅い場合は効果が違うような気がするんだけど、今はそこまで頭が回らないです。


pipelineについてはpolipoのサイト(英語)にも書いてあったし、Studing Httpのサイトやfirefoxのfaqにもものすごく詳しく書いてあったので、興味がある人はそちらを参考に。

http://www.pps.jussieu.fr/~jch/software/polipo/manual/Pipelining.html

http://www.studyinghttp.net/connections

http://developer.mozilla.org/ja/docs/HTTP_Pipelining_FAQ


あと、polipoのサイトには

  • HTTP1.1サーバでも、パイプラインをサポートしていないバギーなサーバーはたくさんあるよ
  • polipoはサーバーがパイプラインをサポートしているか慎重に調べ(carefully probes)てからパイプラインを使うぜ

ようなことが書いてます。どんな実装になってるか興味ありますねー。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証