
perl
文章平均质量分 67
laputa73
学到老
展开
-
coro学习2-并行ping
整体框架和http几乎一样,就是更换了模块。可以比较一下和纯AnyEvent::Ping实现有点是控制逻辑放在了协程而不是回调函数中use Coro;use AnyEvent::Ping;my $cocurrent = 100; # 并发数my @todoList = map { "192.168.6." . $_ } (1 .. 254); #my @c原创 2012-07-18 09:51:13 · 1041 阅读 · 2 评论 -
coro::socket+coro::handle echo server(2)-sysread 的改造
前面的server是用getline实现的,想改用sysread实现但是coro默认的sysread的行为是模拟系统的sysread,和我的需求不太一样我希望是指定读取nbyte的字符,如果不满nbyte,就全部返回,为空就等待而sysread会等待达到指定长度直到超时需要对sysread对应的READ方法作如下修改 sub READ { my $len = $_[原创 2013-01-17 12:07:55 · 803 阅读 · 0 评论 -
anyevent::socket+anyevent::client 测试客户端
这个就是加上了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 AnyEv原创 2013-08-02 20:29:03 · 707 阅读 · 0 评论 -
Anyevent::socket和Coro::Handle组合,echo server(完结)
之前这个组合怎么也搞不定,主要还是对coro的概念有些不清楚.时隔半年,重新写了一版,居然就顺利通过了.回过头看,其实和当初的错误版本几乎都看不出区别.可谓失败和成功只有一线之隔.再次吐槽作者,给个完整的例子不行啊.要点,AE的事件循环仍然保留,用于监听.每个连接起一个协程,在coro内部用无阻塞handle读取.这个就和coro::socket+coro::handle是基本原创 2013-08-02 20:22:28 · 1063 阅读 · 3 评论 -
anyevent::snmp+coro
anyevent是基于事件和回调的格式,有时候用起来不太方便.结合coro变成同步方式就容易理解一些. #/usr/bin/env perl#测试anyevent::snmp+coro#测试取多个oiduse Coro;use AnyEvent;use AnyEvent::SNMP;use Net::SNMP;my $cocurrent =原创 2013-08-05 16:18:50 · 892 阅读 · 0 评论 -
Anyevent::SNMP实例
之前不知道为什么不成功. 重新找了新环境.安装Net::SNMP和AnyevenSNMPAnyEvent-SNMP-6.0Net-SNMP-5.2.0Net-SNMP-v6.0.1Net-SNMP5.2的版本获取有问题,不过不影响使用.use strict; use AnyEvent::SNMP; use Net::SNMP; use Data::Dumpe原创 2013-08-05 10:21:59 · 883 阅读 · 0 评论 -
anyevent::snmp(2) 扫描地址段
前面实现了单个ip的anyevent,现在可以实现地址段的扫描.这个和ping很类似.#/usr/bin/env perl#测试anyevent::snmp 并发use AnyEvent;use AnyEvent::SNMP;use Net::SNMP;my $cocurrent = 100; # 并发数#my @todoList = map {原创 2013-08-05 11:54:20 · 849 阅读 · 0 评论 -
几种web app性能对比(jsp/mojo/ngx_perl/ngx_lua/plack/twiggy)
测试命令ab -c n -t 1 -k感觉-k参数对nginx就是开挂.不加也就2k多.加了一下到10kngx_lua性能实在强悍.难怪现在有专门的nginx+lua应用 服务器了jsp用的resin3,还是线程模型,也许4会好一点?psgi还没测,安装依赖模块太多了.对twiggy/feersum有一定期待,不过预计和mojo/hypnotoad差不太多.原创 2013-08-19 21:13:45 · 1640 阅读 · 0 评论 -
[perl]支持ipv6-icmp ping
1.参照AnyEvent::Ping修改模块AnyEvent::Ping6 package AnyEvent::Ping6;#use 5.008_001;use 5.014; #need socket version of perl 5.14use strict;use warnings;our $VERSION = 0.001; #new versio原创 2013-12-09 16:13:58 · 1480 阅读 · 0 评论 -
AnyEvent学习之2 -并行ping
这个例子是参照CU flw斑竹的抓网页例子写的异步并行ping的例子。使用了Anyevent::ping模块。(这个比较简单)很奇怪,Anyevent::FastPing 模块怎么也无法正确运行。(功能太复杂,需要分析源码,还有c代码)先看看ping模块的例子use AnyEvent; use AnyEvent::Ping; my $c = AnyEvent原创 2012-07-16 18:17:01 · 2776 阅读 · 0 评论 -
anyevent::snmp(3)使用ae::delay实现并行+顺序请求
在实际使用中,并行的请求内部很有可能有顺序的要求.比如按设备并行,同一设备按snmp采集的oid串行. 使用anyevent::snmp的嵌套回调,很快就会让人疯掉. 借助coro无疑是比较好的方'案,但是在一些简单的场合,也可以使用Anyevent::Delay或者Anyevent::Delay::simple,来实现顺序请求. 原本嵌套的回调可以写成并列的函数.同时可以传递参数.可原创 2013-12-11 16:46:38 · 974 阅读 · 0 评论 -
[es]perl操作es中文处理
es默认使用utf8, perl也默认使用utf8,但是并不代表perl可以透明支持es的中文检索。这里涉及三个和中文有关的问题,中文数据的插入,中文数据的输出和中文数据的检索。其中问题1和问题3是一样的。输入的时候,取决于数据的来源,一般来说,取决于源程序的编码格式。一般的编辑器默认为asc模式,可以转换为utf8.输出的时候,一般是输出到终端,所以取决于终端的编码格式。window原创 2015-11-03 09:02:35 · 1068 阅读 · 0 评论 -
[perl]coro在web框架(mojo,Anyevent::httpserver)中的用法
perl的AE和coro用了很多年,但是用来搭服务化框架的时候,被一个问题困扰了一年。就是在web框架中如何使用coro。之前一直都是在coro 中使用AE模块,完全没有问题。但是在AE里面用coro,倒是很少。直接在事件循环里面用coro, 会报block itself的错误。昨天在看博客的时候,看到ae::socket+coro::handler的配合,突然灵光一现。unblock就可以了吧。...原创 2018-03-07 10:48:43 · 619 阅读 · 0 评论 -
perl解析ip的经典方法
my $e = qr/[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]/;my $match_ip = qr/($e)\.($e)\.($e)\.($e)/;if ( $str =~ /^$match_ip$/ ){ print "$1,$2,$3,$4.\n";}转载 2013-04-12 12:57:53 · 766 阅读 · 1 评论 -
perl并行处理大文件
有时候会需要对大文件进行并行处理.对于文本文件,需要保证行的完整性.一种是快速跳过不需要的行#!/bin/env perluse strict;my $m=$ARGV[0]; #分成m份my $l=$ARGV[1]; #第l份my $file="test1.txt";#my $line=`wc -l $file`;#my ($linenum)=$li原创 2013-04-01 18:34:55 · 2632 阅读 · 0 评论 -
perl anyevent socket编程(1)-echo client/server
本来是测试coro socket server的,结果没搞定,太面了....coro::socket的文档也太简略了.先看看anyevent的例子吧,这个出自eg中的ae2.pl我分成了c/s两个server代码use warnings;use strict;use Time::HiRes qw(time);use AnyEvent;#这个是ae的perl实现,翻译 2013-01-14 16:18:26 · 1493 阅读 · 0 评论 -
coro学习1 -并行抓网页
折腾了很久的stackless python和greenlet,突然想到,难道万能的perl就没有协程的实现吗?众里寻他千百度,度娘了一下,还真有,就是 Coro - the only real threads in perlT_T,我怎么能忘了CPAN呢。coro基本提供了和stackless一样的功能。同一个作者还提供了libEV,anyevent模块来支持异步的事件接原创 2012-07-18 09:47:42 · 1204 阅读 · 0 评论 -
coro学习-击鼓传花
这个是协程的经典例子。之前有一篇erlang和stackless比较的文章有详细介绍。用perl的coro实现了一下。程序没有很好地优化架构,不过便于阅读。#!/usr/bin/env perl#coro测试程序testcoro11.pl#perl版的击鼓传花(erlang和stackless的经典例子)#由n个节点组成一个环状网络,在上面传送共m个消息。 #将每个消息(共原创 2012-07-20 11:56:44 · 983 阅读 · 0 评论 -
Anyevent学习之一:Anyevent::HTTP
这个是CU上斑竹提供的例子,使用AnyEvent::HTTP模块并行异步抓取网页写的确实结构很清晰,可以作为经典例子#!/usr/bin/perluse strict;use warnings;use AnyEvent;use AnyEvent::HTTP;my $cocurrent = 100; # 并发数my @todoList = map {转载 2012-07-16 18:10:45 · 1988 阅读 · 0 评论 -
nginx的perl cgi支持修改
网上关于nginx支持perl cgi的文章不少。不过多半是方法1即基于http://wiki.codemongers.com/NginxSimpleCGI的修改实现 它的特点是用到了ProcManager模块use FCGI; use Socket; use FCGI::ProcManager; 还有 require 'syscall.ph';网上还有原创 2012-08-13 10:43:48 · 1866 阅读 · 0 评论 -
perl socket编程。绑定本地地址以及绑定本地网卡。
最近在弄多网卡测试。本来以为很简单。不过还是费了一些力气找文档。集中记录一下。1使用socket模块,绑定本地地址#!/usr/bin/perl -w# tcp_socket_cli.pluse strict;use Socket;my $addr = $ARGV[0] || '220.181.x.x';my $port = $ARGV[1] || '80';my原创 2012-12-06 16:15:53 · 1426 阅读 · 0 评论 -
anyevent::socket+anyevent::handle server编程 (echo server改造 + 测试server)
push_read是一次性的读.改为on_read方法可以实现持续读.直到客户端断开#!/bin/env perl#使用on_read代替push_readuse warnings;use strict;use Time::HiRes qw(time);use AnyEvent;#这个是ae的perl实现,要比EV慢一点点use AnyEvent::Impl原创 2013-01-15 09:01:25 · 1118 阅读 · 0 评论 -
anyevent::socket+coro::handle client编程(测试客户端)
还是一样的功能,使用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 An原创 2013-01-15 17:43:22 · 823 阅读 · 0 评论 -
coro::socket+coro::handle client编程(测试client)
下面使用无阻塞的的coro::socket实现测试客户端使用coro::socket+coro::handle实现注意,coro::handle需要用到anyevent因为client比较简单,所以看起来和前面的实现每什么区别,就是print $sock换成了$sock->print #!/bin/env perl#使用coro::socket作client#使用cor原创 2013-01-15 14:43:42 · 899 阅读 · 0 评论 -
perl coro socket编程(2)-客户端coro改造
先从客户端开始改造.把多进程/线程改写成coro的协程是最自然的思路了.coro本身并不一定要求事件,主要是实现无阻塞.而client主要是发送,可以认为是无阻塞的,所以也可以不用coro::socket.但是延时是需要用到事件的可以对比看看如果用默认的select或者sleep,整个进程就会阻塞但是如果使用coro的sleep或者select,就不会(作者说Coro:原创 2013-01-14 09:40:26 · 921 阅读 · 0 评论 -
coro+io::select实现无阻塞server (测试server)
这个其实只有理论上的意义,方便了解coro的原理实际上既然用了select ,再用coro反而显得很笨拙.#!/bin/env perl#select sever coro版(ok)#换一种写法,每个连接起一个协程#因为select直接可以得到有数据的socket#所以可以用cede_to,直接唤醒对应的协程#主要演示一下cede_to和schedule的用法(类似lu原创 2013-01-15 17:54:37 · 790 阅读 · 0 评论 -
perl coro socket编程(1)
coro提供了perl的非阻塞io.但是作者提供的文档太简略了,例子也没有.自己尝试写了几个例子.分别实现CU上仙子提供的例子以及AE自带的echo server例子相关的模块有coro:;socket,coro::handleae::socket,ae::handle 先看看传统的socket编程(CU上仙子提供的例子)客户端使用多进程并发use strict转载 2013-01-14 09:19:08 · 1103 阅读 · 0 评论 -
corc::socket+coro::handle server-echo server
这个组合的语法和传统的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慢一点原创 2013-01-16 14:24:40 · 609 阅读 · 0 评论 -
[perl]perl的反射机制
perl是一种非常灵活的脚本语言。也存在对反射的需求场景。反射就是将字符串转换为对应的语言对象。(不考虑eval这样的终极必杀技)1.反射为普通变量这个是不支持的,就是说,你没办法实现my $a="b";my $b="123";print \$a; # 企图得到"123"是不可能的变通的办法是使用hashmy $b='123';my $c{'b'}=$b;my $a='b';print ...原创 2018-04-23 15:44:59 · 371 阅读 · 0 评论