LWP::UserAgent
模块允许使用回调以块的形式读取Web内容。
$r = $ua->get($url, ':content_cb' => sub
{
my ($chunk, $resp, $proto) = @_;
# ...
});
似乎块大小被预设为16384字节,这对我来说非常小。
如何将块设置为不同的大小,比如4MB,即4*1024*1024
?
我添加了:read_size_hint
,如下所示,但没有看到任何效果。
$r = $ua->get($url, ':read_size_hint' => 4*1024*1024, ':content_cb' => sub
{
my ($chunk, $resp, $proto) = @_;
# ...
});
3条答案
按热度按时间lyr7nygr1#
:read_size_hint
只是给底层套接字模块sysread
的一个提示,这并不意味着一次会读取那么多数据,只是在数据已经可用的情况下才有可能读取。sysread
可以返回多少实际可用的数据,这取决于发送方发送数据的速度(sysread不会等待更多时间,而是返回目前可用的数据)以及套接字读取缓冲区的大小。在TLS的情况下,它还将取决于发送方使用的TLS记录大小,即单个
sysread
不会返回跨越多个TLS记录的结果。由于TLS中的最大记录大小为16384,因此任何更大的:read_size_hint
设置都无效。2w2cym1i2#
恐怕这完全取决于发送服务器的判断。
我所做的是在
response_data
处理程序中累积它们的响应,直到达到某个标准时才采取进一步的操作。另一种选择是让对象累积它并使用其他处理程序。
7lrncoxx3#
对于固定大小的块: