这个就是加上了timer.实现了收发2次中间的延时.
同时,加强了解了cv->recv,cv->begin,$cv->end的认识
#!/bin/env perl
#aec3.pl(ok)
#加上时延,实现了乱序
#收发2次
use warnings;
use strict;
use Time::HiRes qw(time);
use AnyEvent;
use AnyEvent::Impl::Perl;
use AnyEvent::Socket;
use AnyEvent::Handle;
my $CYCLES = 3;
my $port = 11212;
my $t = time;
#my $cv = AnyEvent->condvar; #这两个等效
my $cv = AE::cv;
for my $connections (1..$CYCLES) {
$cv->begin; #开启事务. and条件. send是or条件
tcp_connect "127.0.0.1", $port, sub {
my ($fh) = @_
or die "tcp_connect: $!";
my $hdl = new AnyEvent::Handle fh => $fh;
$hdl->push_write ("1write $connections\n");
$hdl->push_read (line => sub {
my (undef, $line) = @_;
print "got 1line $line.\n";
my $w;$w = AnyEvent->timer (after => 0.25, cb => sub { #必须先定义$w
warn "timeout\n";
$hdl->push_write ("2write $connections\n");
$hdl->push_read (line => sub {
my (undef, $line) = @_;
print "got 2line $line.\n";
undef $hdl;
#$cv->send; #一次连接交互完成,结束tcp_connect,
$cv->end; #一次连接交互完成,结束tcp_connect,
});
});
undef $W;
#undef $hdl;
#$cv->send;
});
};
#$cv->recv; #不应在此recv,否则就变成循环而非并发了
};
$cv->recv;
$t = time - $t;
printf "%.3f sec\n", $t;
exit;