anyevent::socket+coro::handle client编程(测试客户端)

来源:互联网 发布:编程学校多少钱 编辑:程序博客网 时间:2024/06/08 07:10

还是一样的功能,使用anyevent::socket+coro::handle实现

 

#!/bin/env perl#使用anyevent::socket作client(ok)#使用coro::handle处理use strict;use AnyEvent;use Coro;use Coro::AnyEvent;use Coro::Handle; use AnyEvent::Socket;#控制超时用#如果用默认的select,就会阻塞use Coro::Select qw(select);my $cocurrent = 3;    # 并发数my @coro;doit() foreach 1..$cocurrent;sub doit{ push @coro, async {  # 创建到server的连接socket  #使用无阻塞的socket#两种都可以  #      my $sock= Coro::Socket ->new(PeerAddr => 'localhost',#                               PeerPort => 1234,#                               Proto    => 'tcp');# my $sock= new Coro::Socket(PeerAddr => 'localhost',#                               PeerPort => 1234,#                               Proto    => 'tcp');                                   tcp_connect "localhost", 1234, Coro::rouse_cb;   my $sock = unblock +(Coro::rouse_wait)[0];                                                                  for (1..10) {  # 每个协 程里,发送10次数据          #print $sock  (random() . "\n");          $sock->print(random() . "\n");          #使用select休眠0.25s          select(undef, undef, undef, 0.5);          #Coro::Select::select(undef, undef, undef, 0.5);  # 每发送一次,就休眠0.25秒          #或者使用非阻塞的sleep 1s.否则会阻塞          #Coro::AnyEvent::sleep 1;      }      $sock->close;  # 发送完后关闭socket,并退出            return;       }     }foreach (@coro) {        print "joining\n";        $_->join;        print "joined\n";};sub random {  # 该函数产生随机字串    my @x=(0..9,'a'..'z','A'..'Z');    join '',map {$x[int rand @x]} 1..49;  # 返回49字节长度的串}


小结一下

可以使用的组合有

coro::socket+coro::handle 这个比较简单,类似以前的代码风格

anyevent::socket+anyevent::handle 这个就是回调函数的风格

anyevent::socket+coro::handle 这个目前还有点没弄明白.client没问题,但是server没搞定