【发布时间】:2014-01-16 08:54:02
【问题描述】:
背景:
我已经为基于AnyEvent::HTTP 的HTTP(S) 编写了LWP::Protocol“实现程序”。 (即:它实现了两个 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 子类“升级”URL scheme,我目前正在做一个黑客攻击,通过为异步请求附加 '_async',并且我已经将 LWP::Protocol 子类作为“实现者”对于匹配/^https?_async$/的方案
问题:
如何让我的LWP::UserAgent 子类选择我的(更多异步)HTTP 和 HTTPS 协议“实现者”而不是系统上安装的其他协议? (即:当LWP::UserAgent子类调用LWP::Protocol::create时)。
我可以强制选择我的“实施者”吗?还是有更自然的方法来做到这一点?
【问题讨论】:
标签: perl asynchronous lwp-useragent anyevent