为什么我得到这个perl Net :: Async :: HTTP警告?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我得到这个perl Net :: Async :: HTTP警告?相关的知识,希望对你有一定的参考价值。

在这个过度简化的脚本中,我正在使用Net::Async::HTTPIO::Async::Loop::EV进行GET请求:

use Modern::Perl '2017';
use IO::Async::Loop::EV;
use Net::Async::HTTP;
use Future;

my $loop = IO::Async::Loop::EV->new;
my $http = Net::Async::HTTP->new(max_redirects => 0);
$loop->add($http);

my $f = $http->GET('https://www.perl.org')
->then(sub {
        my $response = shift;
        printf STDERR "got resp code %d\n", $response->code;
        return Future->done;
    });
$http->adopt_future($f->else_done);

$loop->run;

我多次收到此警告:

EV: error in callback (ignoring): Can't call method "sysread" on an undefined value at .../IO/Async/Stream.pm line 974

我在使用IO::Async::Loop::Event时也会收到此警告(再次在IO::Async::Stream,第974行)。

但是,对于非安全(http)链接,一切看起来都不错。所以IO::Async::SSL可能有些不对劲。 (我在不同的机器上尝试了这个,使用不同的操作系统 - 仍然收到这些警告)

为什么我多次收到此警告?它也会出现在你的机器上吗?

答案

这个警告似乎特定于IO::Async::Loop::EV实施。如果你只是

use IO::Async::Loop;
my $loop = IO::Async::Loop->new;

然后它似乎工作得很好。除非你为特定目的选择它,否则最好避免它,只是让IO::Async::Loop->new魔术构造函数找到一个好的。

另外,而不是结束脚本

$loop->run

你可以改用

$f->get

所以它执行阻塞等待,直到Future完成但后来干净地退出,以便不必<Ctrl-C>它中止。


我在https://rt.cpan.org/Ticket/Display.html?id=124030上提出这个作为对IO :: Async :: Loop :: EV的错误

以上是关于为什么我得到这个perl Net :: Async :: HTTP警告?的主要内容,如果未能解决你的问题,请参考以下文章

Python 等效于 Perl 的 HTTP::Async->next_response

perl6: Proc::Async (new)

Macports 警告:无法重建 Perl 扩展 p5.26-net-ssleay

为啥当我使用 Perl 的 REST::Client 发送 POST 请求,而不是使用 Perl 的 LWP::UserAgent 或 Python 时,我得到“405: Method Not All

.NET Web应用中为什么要使用async/await异步编程

Async Void、ASP.Net 和未完成操作计数