背景:
我已经为基于AnyEvent::HTTP的 HTTP(S) 编写了一个LWP::Protocol “实现器” 。(即:它同时实现HTTP 和 HTTPS)。
它与LWP::Protocol::AnyEvent::http或Coro::LWP的不同之处在于它不会 BLOCK on $protocol->request
。我已经为 select()、名称解析等实现了与Coro::LWP相同的大部分技巧,但更好地利用了AnyEvent。
现在返回的 HTTP 响应$protocol->request()
是230 - Pending Completion of Request
,但我愿意接受更好的方法来传达它不是一个完整的请求。
我还编写了HTTP::Response的一个子类,如果他们试图在响应完成之前使用部分响应,它会强制标准“消费者”方法上的 BLOCKING;它还添加了与内部/提供的 AnyEvent::CondVar
良好工作的方法,以便您可以一次触发大量请求,以及使用AnyEvent做其他事情。(我还覆盖了所有 LWP::UserAgent 的后send_request()
逻辑,将其推迟到真正的请求完成)。
问题:
我目前正在做一个 hack,如果我的LWP::UserAgentscheme
子类通过附加'_async'
异步请求来“升级”URL ,并且我已经让LWP::Protocol子类成为方案匹配的“实现者”/^https?_async$/
问题:
如何让我的LWP::UserAgent子类选择我的(更异步的)HTTP 和 HTTPS 协议“实现者”而不是系统上安装的其他协议?(即:当LWP::UserAgent子类调用LWP::Protocol::create
时)。
我可以强制选择我的“实施者”吗?还是有更自然的方法来做到这一点?