1

背景:

AnyEvent::HTTPに基づいた HTTP(S) 用のLWP::Protocol 「実装者」を作成しました。(つまり、 HTTP と HTTPSの両方を実装しています)。

でブロックしないという点で、 LWP::Protocol::AnyEvent::httpCoro::LWPとは異なり$protocol->requestます。select() や名前解決など、Coro::LWPと同じハックのほとんどを実装しましたが、 AnyEventをより有効に活用しています。

によって返される HTTP 応答は$protocol->request()230 - Pending Completion of Requestのところですが、それが完了した要求ではないことを伝えるためのより良い方法を受け入れます。

HTTP::Responseのサブクラスも作成しました。このサブクラスは、標準の「コンシューマー」メソッドで、レスポンスが完了する前にその一部を使用しようとした場合にブロックを強制します。また、内部/提供されたAnyEventとうまく連携するためのメソッドを追加して、一度に多くのリクエストを開始したり、 AnyEvent::CondVarで他のことを実行したりできるようにします。(また、LWP::UserAgent の事後ロジックをすべてオーバーライドして、実際のリクエストが完了するまで遅延させました)。send_request()

問題:

私は現在、LWP::UserAgentサブクラスが非同期リクエストにscheme追加することでURL を「アップグレード」し、 LWP::Protocolサブクラスがスキーム一致の「実装者」であるというハックを行っています。'_async'/^https?_async$/

質問:

LWP::UserAgentサブクラスに、システムにインストールされている他のものではなく、(より非同期の) HTTP および HTTPS プロトコルの「実装者」を選択させるにはどうすればよいですか? (つまり、LWP::UserAgentサブクラスがLWP::Protocol::createを呼び出すとき)。

「実装者」の選択を強制できますか? または、これを行うより自然な方法はありますか?

4

1 に答える 1