anyevent::socket+anyevent::client 测试客户端

来源:互联网 发布:c 可视化编程 编辑:程序博客网 时间:2024/05/18 01:06

这个就是加上了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;


 

原创粉丝点击