Polipo - ローカルプロキシサーバ (dolipo / tolipo)
- 2008.02.29 Friday
- dev
各所で話題の dolipo を試してみました。
dolipo は、ローカルで動作させるプロキシサーバ Polipo の GUI フロントエンドアプリケーションです (Mac OS X 用)。
- [N] Macのウェブブラウズを劇的に加速する「dolipo」
- Macのネット生活が3倍改善する「dolipo」リリース: [mi]みたいもん!
- いい感じ: 驚速ブラウジング、Macユーザ必携ツール登場:Dolipo
- dolipo, a wrapper of polipo
使ってみると、確かに体感できるほどぐっと速くなります。
キャッシュの効果が大きいのでしょう、設定して起動した後に、見ていたページをリロードすると応答速度が明らかに変わるのが分かります。
ただし、Polipo を通すことで、影響が出るウェブページもありますので、注意してください。[参考 : polipo(dolipo)向けproxy.pac]
Polipo の動作
Polipo の動作について polipo の公式ウェブページに簡単な解説があります。
creazy photograph さんのところで、意訳されています。
5)Polipo はPoor Man's Multiplexing を利用できます。
→スミマセン、ここは良く分かりませんでした。
Macのネット環境高速化「dolipo」はナゼこんなに速いのか ::: creazy photograph
原文は以下の通り。
- Polipo can optionally use a technique known as Poor Man's Multiplexing to reduce latency even further.
意訳すると、
Polipo はレイテンシー (待ち時間) を減らすため、簡易の多重化通信 (Multiplexing) をオプションとして、利用できます。
という感じでしょうか。Poor Man's
という言い回しは「廉価版の」「経済的な」というような意味合いがあるみたいです。
詳細な説明が polipo の公式ウェブページにあるので、さらに見てみます。
A major weakness of the HTTP protocol is its inability to share a single connection between multiple simultaneous transactions - to multiplex a number of transactions over a single connection. In HTTP, a client can either request all instances sequentially, which significantly increases latency, or else open multiple concurrent connections, with all the problems that this implies (see Persistent connections).
Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by requesting an instance in multiple segments; because the segments are fetched in independent transactions, they can be interleaved with requests for other resources.
Poor Man's Multiplexing in The Polipo Manual
最初の段落では、
HTTP プロトコルの大きな欠点として、複数の同時的なトランザクション間の単一コネクション - つまり、単一コネクションに対しての多重通信が共有できないという点があります。HTTP では、クライアント (ブラウザ) は、全てのインスタンス (取得対象となる文書、イメージなど) を順番順番にリクエストする方法 - 待ち時間が大幅に増えます - もしくは、複数の同時接続をオープンする方法 (HTTP1.1 ではオプションのひとつでしかありません) を選びます。
続いて、
PMM (簡易多重化通信) は、インスタンスを複数セグメントでリクエストすることにより多重通信をシミュレートします。セグメントは個別の独立したトランザクションで取得されます。他のリソースのためにリクエストをインタリーブできます。
とあります。
分割要求して、polipo 側でくっつけるようにして多重化しているってことなんでしょうか。訳があっているかどうか分かりませんが、私はそのように解釈しました。
ちなみに PMM はデフォルトでは off になっているそうです。config ファイルで pmmFirstSize
と pmmSize
を設定すると有効になります。2 つのパラメータがありますが、どちらひとつを設定するだけでも有効になります。その場合、もう一方の方に値がコピーされます。
Polipo のパイプライン検査処理
あと、polipoのサイトには
- HTTP1.1サーバでも、パイプラインをサポートしていないバギーなサーバーはたくさんあるよ
- polipoはサーバーがパイプラインをサポートしているか慎重に調べ(carefully probes)てからパイプラインを使うぜ
ようなことが書いてます。どんな実装になってるか興味ありますねー。
ソースコードが公開されているので、さっくり見ることができます。
私もざっくりとしか見ていないので、断定はできかねるのですが、server.c で「らしい」処理が確認できます。
/* If server->pipeline <= 0, we don't do pipelining. If server->pipeline is 1, then we are ready to start probing for pipelining on the server; we then send exactly two requests in what is hopefully a single packet to check whether the server has the nasty habit of discarding its input buffers after each request. If server->pipeline is 2 or 3, the pipelining probe is in progress on this server, and we don't pipeline anything until it succeeds. When server->pipeline >= 4, pipelining is believed to work on this server. */ if(server->version != HTTP_11 || server->pipeline <= 0 || server->pipeline == 2 || server->pipeline == 3) { if(connection->pipelined == 0) n = 1; else n = 0; } else if(server->pipeline == 1) { if(connection->pipelined == 0) n = MIN(2, maxPipelineTrain); else n = 0; } else { n = maxPipelineTrain; }
server.c in polipo 1.0.4
接続したサーバに対して、pipeline
と pipelined
というパラメータを保持して、パイプラインが行えるかどうかを確認しています。
pipeline
が 2 もしくは 3 であれば、パイプラインの検査中ということみたいです。
上記のコードは httpServerTrigger
という関数から抜き出しています。他の場所でもいくつかこのフラグに対して処理が行われている部分があります。
Polipo の設定
polipo を起動した後、ブラウザから http://127.0.0.1:8123/polipo/config にアクセスすると、polipo の設定を確認・変更することができます。これは Mac OS X / Windows / Linux 全てに共通です。
dolipo では、設定ウィンドウより「Open Polipo Config」ボタンからアクセス可能になっています。
他にブラウザからできる内容として
- ステータス確認 http://127.0.0.1:8123/polipo/status
- サーバリスト http://127.0.0.1:8123/polipo/servers
- キャッシュインデックス http://127.0.0.1:8123/polipo/index?
などがあります。ただし、後者二つはデフォルトでは無効に設定されているので、config ファイルで有効にする必要があります。
キャッシュインデックスは
http://127.0.0.1:8123/polipo/index?http://serenebach.net/
のように ? の後に、確認したいアドレスをつけます。
Polipo を Windows で利用する - tolipo
Polipo は Windows 版が用意されています。インストーラ もありますが、公式ウェブページにもバイナリがあります。
設定などはテキストエディタを使って修正する必要があります。例えば、polipo 入れてみた on WindowsXP - 母方の祖母にフル・ネルソン日記などで紹介されています。
私の場合、dnsNameServer
を直接設定せずに、
dnsUseGethostbyname = yes
のように dnsUseGethostbyname
の設定を有効にしました。
設定ファイルの名称は何でもいいのですが、polipo.conf
という名称にしておくと、tolipo を利用できるので、オススメです。
tolipo は polipo を起動して、タスクトレイに常駐するアプリケーションです。図のように「tolipo.exe」「polipo.conf」を「polipo.exe」と同じフォルダに入れます。
私の場合、「cache」というフォルダも作成しておいて、そこにキャッシュのファイルが保存されるようにしました。
[2008.04.02 追記] Windows 上で動作する polipo の GUI ラッパーアプリケーション solipo を作成しました。 → [solipo 紹介ページ]
スポンサーリンク