事件系统的想法不是写线性代码,阻止某个特定事件的等待,而是设置处理器,以便在事件发生时做什么,然后等待任何这些事件发生。事件框架一般会在事件发生时发送给这些事件处理器。接下来的诀窍是设置处理器,然后等待它。
EV 和 AnyEvent 都会支持这类事情。 另外, 需要查看的还有 < a href="https://metacpan.org/module/POE" rel="noreferr"\\code>\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
总的想法在其中任何一种情况下都大致相同,但我将在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- & gt; add
方法将一个通知对象安装到循环中, 在此情况下, 它是一个周期计时器, 每两秒运行指定函数。 在程序底部, 主的 $loop- gt; run
方法会在适当的时候发送给事件处理者 。