标签: io-async

如何使用AnyEvent和Perl并行运行外部命令

我是Perl 5异步流程的新手,并且发现令人兴奋的是,CPAN提供了类似的支持,我们可以在Node.js中使用AnyEvent,IO :: Async等进行类似的支持.但是,本教程提供了一些复杂内容的示例.我需要的只是使用AnyEvent并行运行外部系统命令.

我是否在下面的示例中正确地执行了异步压缩多个文件?请不要担心运行系统命令zip而不是使用CPAN模块; 这个例子纯粹是为了演示运行异步进程的想法......

#!/bin/env perl
use strict; 
use AnyEvent;
use AnyEvent::Util;

my $s1    = time;

my $quit_program = AnyEvent->condvar(
    cb => sub {
        warn "Done async";
    }
);

my $result;
$quit_program->begin( sub { shift->send($result) } );

for my $file (@files) {
    $quit_program->begin;

    my $cv; $cv = run_cmd [qw(zip), "${file}.zip", $file],
                "<" , "/dev/null",
                ">" , "/dev/null",
                "2>", "/dev/null";

    $cv->cb (sub {
        shift->recv and die "command failed";

        # undef $cv;
        $quit_program->end;
    }); …
Run Code Online (Sandbox Code Playgroud)

perl asynchronous anyevent io-async

5
推荐指数
1
解决办法
827
查看次数

嗯,IO :: Async甚至无法处理10k连接?

嗨,我构建了一个非常简单的HTTP服务器,只对POE模块进行压力测试.

这是我测试它的方式:

for x in {1..10000}; do
  curl xxxxx:12342 --retry-delay 5 --retry 3 -d randombytes$x 
done
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我通过对等消息看到多个"连接重置",因此对于这个10k连接,我总共丢失了大约1200个请求.

反正有没有提高它的表现?在同一台服务器上测试了nginx,在此期间没有更改内核参数,根本没有连接重置消息.

编辑

我已经增加了max fileno/per user max fileno,前者是fs.file-max = 3246455,而后者是10240

附加源代码:

use strict;
use warnings;
use feature 'say';

use Net::Async::HTTP::Server;
use IO::Async::Loop;

use HTTP::Request;
use HTTP::Response;
use Data::Dumper;

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

my $httpserver = Net::Async::HTTP::Server->new(
    on_request => sub {
        my ($self, $req) = @_;
        my ($code, $result) = (200, "It works\n");

        my $response = HTTP::Response->new ($code);
        $response->add_content ($result);
        $response->content_type ("application/json"); …
Run Code Online (Sandbox Code Playgroud)

linux perl networking io-async

2
推荐指数
1
解决办法
261
查看次数

标签 统计

io-async ×2

perl ×2

anyevent ×1

asynchronous ×1

linux ×1

networking ×1