php定时器使用,PHP实现javascript的定时器

主要思路还是通过libevent来实现, PHP的Event扩展实现了PHP与libevent库的对接,所以我们只需要安装Event扩展就可以使用libevent的功能。

废话不多说,上代码:

namespace Church;

use Event;

use EventBase;

class Reactor

{

protected $eventBase;

protected $events;

public function __construct()

{

$this->eventBase = new EventBase();

}

public function addTimer($second, $what, $cb, $arg = null)

{

$event = new Event($this->eventBase, -1, $what, $cb, $arg);

$event->add($second);

$this->events[spl_object_hash($event)] = $event;

return $event;

}

public function del($resource)

{

$event = $this->events[spl_object_hash($resource)];

$event->del();

$event->free();

}

public function start()

{

$this->eventBase->loop();

}

}

namespace Church;

use Event;

class Timer

{

protected static $reactor = null;

public static function setTimeout($callback, $millisecond)

{

self::checkTimeFormat($millisecond);

$reactor = self::getReactor();

return $reactor->addTimer($millisecond / 1000, Event::TIMEOUT, $callback);

}

public static function setInterval($callback, $millisecond)

{

self::checkTimeFormat($millisecond);

$reactor = self::getReactor();

return $reactor->addTimer($millisecond / 1000, Event::TIMEOUT | Event::PERSIST, $callback);

}

public static function clearTimeout($event)

{

self::clear($event);

}

public static function clearInterval($event)

{

self::clear($event);

}

public static function clear($event)

{

$reactor = self::getReactor();

$reactor->del($event);

}

public static function loop()

{

self::getReactor()->start();

}

public static function checkTimeFormat($millisecond)

{

if ($millisecond < 1) {

trigger_error('Millisecond can not less than 1');

}

}

protected static function getReactor()

{

if (is_null(self::$reactor)) {

self::$reactor = new Reactor();

}

return self::$reactor;

}

}

复制代码

代码非常简单,就是内置类的使用,有些使用技巧相信朋友们很容易可以看出来,我也不作过多的解释。

使用:

use Church\Timer;

Timer::setInterval(function() {

//do something

echo "hello!world", PHP_EOL;

}, 100);

Timer::loop();

复制代码

全部代码可以在github上下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值