POE

这两天比较空,刚看点了POE ,于是就用POE写了一个daemon,和crontab的作用差不多。主要是自己写的,控制方面更灵活一些。现在提供了基本的start,stop,restart,state方法。要加新的任务只要在指定目录中添加相应的模块就可以了。用起来还算是简单吧。不过POE是单进程的,不知道如果挂的任务多了会不会太慢。现在虽然写出了个框,以后却不一定用的上,以后弄服务器争取能用一下试试。

代码:







;
POE


;
FindBin ();
File::Find ();
Data::Dumper;

constant => ;
constant => ;

= ;
;

main();

{


= [];
() {
( ) {
start();
} {
client();
}
} {
usage();
}
POE::Kernel->run();
();
}

{
;
}



{


POE::Session->create(
=> {
=> ,
=> ,
=> ,
=> ,
=> ,
=>{
[KERNEL]->alias_set();
[KERNEL]->yield();
},
}
);

POE::Component::Server::TCP->(
=> ,
=> ,
=> PORT,
=> ,
=>{
[KERNEL]->post(=> ) [HEAP]->{stop_server} == ;
},
=> { => , },
);
}

{
(, , ) = [ KERNEL, HEAP, ARG0 ];
(->{stop_client_handler}) {
->post(->{stop_client_handler}, , )
(->{stop_client_handler});
->{stop_client_handler};
} {
->{stop_client_handler} = || ;
stop_module();
->{check_result} = ;
->yield();
}
}

{
(, , ) = [ KERNEL, HEAP, SENDER ];
;
( ) {
= ->call( => );
= ;
->call(, , );
}
->post(, , );
}

{
(, , ) =
[ KERNEL, HEAP, ARG0 ];
(->{restart_client_handler}) {
load_module();
->post(->{restart_client_handler}, , )
(->{restart_client_handler});
->{restart_client_handler};
} {
->{restart_client_handler} = || ;
stop_module();
->{check_result} = ;
->yield();
}
}

{


(, ) = [ KERNEL, HEAP ];
() {
->delay_add(=> );
} {
->yield(->{check_result});
}
}

{
= ;
= find_module();
() {
;
;
{
;
*{} ={
{};
, [KERNEL]->alias_list, ;
};
*{} ={
= [KERNEL];
->alias_set();
->sig(=> );
->delay_add(, );
};
(UNIVERSAL::can(, )) {
*{} ={ ; };
}
(UNIVERSAL::can(, )) {
*{} ={ ; };
}
}

= find_method();
;
{} = ;
POE::Session->create(=> [ => [] ]);
++;
= > ;
}
}

{
= [];
( ) {
->signal(, );
}
}



{
= ;
POE::Component::Client::TCP->(
=> ,
=> ,
=> PORT,
=>{
[HEAP]->{server}->put();
},
=>{
(, ) = [ KERNEL, ARG0 ];
= ;
, ;
( =~ ) {
->yield();
}
},
);
}

{
(, , ) = [ KERNEL, HEAP, ARG0 ];
->{stop_server} = ;
( ) {
->{client}->put();
->{stop_server} = ;
->post(=> , [SESSION]);
} ( ) {
->{client}->put();
->post(=> );
} ( ) {
->{client}->put();
->post(=> , [SESSION]);
} {
->yield(=> );
}
}

{
= [HEAP];
->{stop_server} = ->{stop_server};
->{client}->put( , [ ARG0 .. ]);
}



{
= ;
;
;
( %{}) {
( !~ && UNIVERSAL::can(, )) {
, ;
}
}
;
}

{
= ;
();
() ;
POSIX::setsid();
(, );
(, );
(, );
();
{PATH} = ;
{ , , , };
}

{
= ;
= ;
;
= ;
=~ ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值