corc::socket+coro::handle server-echo server

本文介绍了一个使用Perl语言实现的简单网络服务示例,该服务利用了Coro和Coro::Socket模块来创建一个支持并发连接的回显服务器。通过协程的方式实现了高效的I/O操作。

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

这个组合的语法和传统的uo::scoket::inet基本是一样的

这个实现有一点局限,就是要求echo信息必须v包含\n

因为是用getline方法读取的

#!/bin/env perl
#sever coro::socket+coro::handle来实现(ok)
use strict;
use Coro;
use AnyEvent;
#这个是ae的perl实现,要比EV慢一点点
use AnyEvent::Impl::Perl;
use Coro::Socket;
use Coro::Handle; 


my $port   = 11212;


#1.创建监听端口
$|++;  # 因为print到终端,所以这里要打开autoflush
my $s = Coro::Socket->new(LocalAddr => 'localhost',  # 创建一个侦听socket
                              LocalPort =>  $port,
                              Listen    => 5,
                              Proto     => 'tcp')
        or die $@;
        
        
#2.处理handle
my @coro;
while(1){
	 my ($fh, $peername)  = $s->accept;
	 next unless  $peername;
	 print "accepet new sock at" . $fh->fileno . "\n";
	 
	 &doit($fh);
	 
}   
	 

sub doit($){
	my ($fh)=@_;
	
	push @coro, async {
	 	$fh->autoflush(1);

 	
	 	  while(my $line=$fh->readline()){
       #my $line=$fh->readline(); 
       if(length($line) >0){
        print $fh->fileno, " ", $line, " ";
        $fh->print($line);   
       }  
      }   
            print "no more data, close socket " . $fh->fileno . "\n";
            $fh->close;
            #关闭协程
            return;  
	 }	
	 
}

  


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值