如何使用Perl模块HTTP::Async处理超时?

如何使用Perl模块HTTP::Async处理超时?,perl,http,asynchronous,timeout,Perl,Http,Asynchronous,Timeout,当使用LWP::UserAgent时,我知道如何处理HTTP::Request操作上的timeout,但由于我需要使用HTTP::Async模块而不是Perl模块LWP::UserAgent,我正在寻找替代解决方案来设置异步HTTP请求的超时时间。您阅读了吗 要设置请求的默认超时,请执行以下操作: # When creating the object: my $async = HTTP::Async->new( timeout => 300 ); # 5 minutes # Chan

当使用
LWP::UserAgent
时,我知道如何处理
HTTP::Request
操作上的
timeout
,但由于我需要使用
HTTP::Async
模块而不是Perl模块
LWP::UserAgent
,我正在寻找替代解决方案来设置异步HTTP请求的超时时间。

您阅读了吗

要设置请求的默认超时,请执行以下操作:

# When creating the object:
my $async = HTTP::Async->new( timeout => 300 ); # 5 minutes
# Changing it later:
$async->timeout(600); # 10 minutes
要更改单个请求的超时,请执行以下操作:

$async->add_with_opts( $request, { timeout => 600 } ); # 10 minutes

更新:似乎存在超时,并且
timeout
属性实际上不起作用。

必须是一个超时,一个正整数,或者可以与Time::HiRes一起使用任何正十进制数?HTTP::Async使用Time::HiRes,因此它应该使用小数秒。不过,我不知道为什么需要设置亚秒精度的超时。我在网上找到的大多数示例都将超时设置为
max\u request\u time
选项,而根本不使用
timeout
选项。为什么?那么,超时选项的作用是什么?我不知道为什么会有两种设置:
max\u request\u time
timeout
。文档无法解释这一点,但从源代码看,如果在发送请求后的
timeout
秒或
max\u request\u time
秒内没有收到数据,则请求会中止,以先到者为准。也就是说,
timeout
会在每次接收数据时重置,但
max\u request\u time
不会重置。