事件系统的想法不是编写阻止等待某个特定事件的线性代码,而是设置处理程序以在事件发生时做什么,然后等待这些事件中的任何一个发生。当事件发生时,事件框架通常会分派给这些事件处理程序。然后诀窍是设置处理程序,然后等待它。
EV 和 AnyEvent 都将支持这种事情。还要看的东西是POE和。IO::AsyncReflex
在这些中的任何一个中,大体的想法都是一样的,但我会举一个IO::Async我最了解的例子,主要是因为我写了它。
use IO::Async::Loop;
use IO::Async::Timer::Periodic;
my $loop = IO::Async::Loop->new;
$loop->add( IO::Async::Timer::Periodic->new(
interval => 2,
on_tick => \&try_to_do_something
)->start );
# Perhaps here you'd add your socket watcher, using an
# IO::Async::Handle or ::Stream or something else
$loop->run;
该$loop->add方法将一个通知对象安装到循环中,在这种情况下,它是一个周期性计时器,每 2 秒运行一次指定的函数。在程序的底部,main$loop->run方法会在适当的时间分派给事件处理程序。