pbergman/event-loop

此包的最新版本(1.2.0)没有可用的许可证信息。

简单的同步事件分发器

1.2.0 2015-12-01 12:04 UTC

This package is auto-updated.

Last update: 2024-08-29 12:41:12 UTC


README

##EventLoop

这是一个简单的轻量级(同步)事件循环,它使用可以注册的观察者,这些观察者将在每次迭代时被调用。我开始这个项目是因为我需要为我在工作的一个分支应用程序做一些类似的东西,我尝试了ev,但缺少了一些东西,并且它并没有真正适合我。循环将一直运行,直到没有更多活跃的观察者,停止或由运行方法提供的参数限制。添加观察者的顺序就是它们将被调用的顺序(先进先出)。如果观察者被停止,循环将将其保留在队列中,以便稍后启动。如果您调用finished方法,观察者将从队列中删除。

##Loop

这是您可以注册观察者和包含循环逻辑的主要类。循环是围绕SplQueue构建的,每个观察者在每次迭代时都会入队和出队。如果观察者没有标记为完成,它将被再次入队;如果标记为停止,则不会再次调用,直到它再次启动。

####add(WatcherInterface $watcher)

此方法可以用于注册您的自定义观察者(自定义观察者应实现WatcherInterface或扩展AbstractWatcher)或一个可以稍后在循环中激活的停止观察者。

####peekBottom()

获取第一个注册的观察者。

####peekTop()

获取最后一个注册的观察者。

####filter(callable $filter)

对注册的观察者进行过滤(类似于数组filter)。

####grep(callable $filter)

对观察者进行grep过滤,并返回匹配该标准的数组。

####getWatcher()

这将返回一个迭代器(生成器),每次调用都返回下一个观察者。

####run( $limit = null)

这将运行循环,如果没有提供限制,它将一直运行直到所有观察者都完成。

####stop()

这将停止循环运行。

####getTicks()

获取迭代次数。

####setMinDuration()

最小持续时间,如果迭代时间比此给定值短或长,它将休眠直到下一个迭代。默认为0.2秒。

####addCallback(callable $callback)

添加回调观察者,此回调将在每次迭代时被调用。

$loop = new Loop();
$loop->addCallback(function(CallbackWatcher $w){
    if ($w->getLoop()->getTicks() === 3) {
        $w->stopped();
    }
});

####addInterval( $interval, callable $callback)

添加间隔观察者,如果间隔为0.4,最小持续时间为0.2,则给定的回调将在每2次迭代时被调用。

$loop = new Loop();
$loop->addInterval(function(IntervalWatcher $w){
    if ($w->getLoop()->getTicks() === 3) {
        $w->getLoop()->stop();
    }
});

####addScheduled(\DateTime $time, callable $callback)

添加计划观察者,当给定时间过去时,它将在每次迭代中被调用。

$loop = new Loop();
$loop->addScheduled(ScheduledWatcher::getNewDateTime(2), function(ScheduledWatcher $w){
        // Will be called after 2 seconds
});

####addPeriodic(\DateTime $start, \DateTime $stop, $interval, callable $callback)

添加周期性观察者,此回调将在给定开始日期后的每个给定间隔被调用,并在停止时间到达时结束。

$loop = new Loop();
$loop->addPeriodic(
    ScheduledWatcher::getNewDateTime(2), 
    ScheduledWatcher::getNewDateTime(4), 
    0.4, 
    function(ScheduledWatcher $w){
        // Will be called after 2 seconds and called every 2 ticks and after 2 seconds
    }
);

####addSignal($signal, callable $callback)

添加信号观察者,当向此进程发送信号时,将调用给定的回调。

$loop = new Loop();
$loop->addSignal(SIGCHLD, function(SignalWatcher $w, $signal){
        echo "Got ", $signal, "\n";
});

####count()

返回注册观察者的数量。

####reset()

将对内部进行重置。