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

本文介绍使用Perl语言结合AnyEvent模块实现TCP连接中消息的乱序发送与接收。通过加入定时器来控制消息发送间隔,实现了在两次收发过程中引入延迟。此外,还深入探讨了条件变量(cv)的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值