POE::Component::Client::HTTP のサブクラス化を考える

| コメント(0) | トラックバック(0)



http://subtech.g.hatena.ne.jp/miyagawa/20060531/1149080673


で、id:miyagawaさんと話したりしてたのだけど、PoCo::Client::HTTPは拡張性という点に関しては設計が悪い。オンメモリでデータを詰め込んでくところなんかは実際xangoを使ったシステムではハックしてファイルに書き出すようにしてるんだけど、これが本当に*hack*って感じのハックで、醜いったらありゃしない(気軽にPoCo::Client::HTTPをアップグレードできないし)


で、PoCo::Client::HTTPの基本的な構成としては



POE::Component::Client::HTTP
-> dispatch to POE::Component::Client::HTTP::RequestFactory
<- get POE::Component::Client::HTTP::Request

monitor socket via Driver::RW

while (read_ready) {
request->add_content(data);
}


みたいな感じなんだけど、このadd_contentとかをオーバーライドしたい。そのためには結局RequestFactoryとRequestを継承する必要があるんだけど、問題点としては:



  • PoCo::Client::HTTPの中でPoCo::Client::HTTP::RequestFactoryがハードコードされてる

    • create_factory みたいなステートが欲しい



  • PoCo::Client::HTTP::RequestFactoryの中でPoCo::Client::HTTP::Requestがハードコードされてる

    • create_requestみたいなステートが欲しい



  • PoCo::Client::HTTP::Requestの中でデータを保存するためだけのメソッドが欲しい。

    • それがないのでしょうがなくadd_content()全体をコピってハックしてる。




実はこの辺のRequestやらRequestFactoryもXangoを最初に作り始めた時にはなかったもの。改良されてるのはいいんだけど、拡張してるユーザーがもう少し使いやすいようにしてもらえると嬉しかったり。


で、今発見したんだけどPoCo::Client::Keepaliveは余計な事にPoCo::Client::DNSを勝手にspawnしてやがる。こっちがわざわざDNSキャッシュしてるのに・・・そういうわけでもう一つRFC:



  • PoCo::Client::Keepaliveの中のDNS解決するかどうかをClient::HTTPからのパラメターで指定でいると嬉しい。


そんなもんかなぁ。


Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ