背景:
我已经为基于AnyEvent::HTTP的HTTP(S)编写了一个LWP::Protocol"implementer"。(即:它同时实现HTTP和HTTPS)。
它与LWP::Protocol::AnyEvent::http或Coro::LWP的不同之处在于,它不会在$protocol->request
上阻塞。我对select()、名称解析等实现了与Coro::LWP相同的大部分技巧,但更好地利用了AnyEvent。
$protocol->request()
返回的HTTP响应目前是230 - Pending Completion of Request
,但我愿意用更好的方式来传达它不是一个完整的请求。
我还编写了HTTP::Response的一个子类,如果标准的"消费者"方法试图在响应完成之前使用部分响应,它会强制BLOCKING;它还添加了一些方法,可以很好地使用内部/提供的AnyEvent::CondVar
,这样您就可以一次发出大量请求,还可以使用AnyEvent做其他事情。(我还覆盖了LWP::UserAgent的post-send_request()
逻辑,将其推迟到真正的请求完成)。
问题:
我目前正在进行一次破解,如果我的LWP::UserAgent子类通过为异步请求添加'_async'
来"升级"URLscheme
,并且我的LWP::Protocol子类是匹配/^https?_async$/
的方案的"实现者">
问题:
如何让我的LWP::UserAgent子类选择我的(more异步)HTTP&HTTPS协议的"实现者"而不是安装在系统上的其他人?(即:当LWP::UserAgent子类调用LWP::Protocol::create
时)。
我可以强制选择我的"实施者"吗?或者有更自然的方法可以做到这一点吗?
您需要在send_request
呼叫附近呼叫implementor
:
LWP::Protocol::implementor('http', 'your::module::name');
请参阅的来源http://search.cpan.org/~gaas/LWP-Protocol-http10-6.03/lib/LWP/Protocol/http10.pm,了解需要实现什么来替换HTTP协议处理程序