hyperf3 使用swoole的timer
时间: 2024-06-12 08:06:21 浏览: 165
Hyperf 是基于 Swoole 4.5+ 实现的高性能、高灵活性的 PHP 持久化框架,特别适用于微服务和中间件的开发
Hyperf框架中使用Swoole的Timer,可以通过以下步骤实现:
1. 在`config/autoload/server.php`中配置Swoole的Timer:
```php
<?php
return [
'servers' => [
[
'name' => 'http',
'type' => Server::SERVER_HTTP,
'host' => '0.0.0.0',
'port' => 9501,
'sock_type' => SWOOLE_SOCK_TCP,
'callbacks' => [
Server::ON_REQUEST => [Hyperf\HttpServer\Server::class, 'onRequest'],
],
'settings' => [
'worker_num' => swoole_cpu_num(),
'max_request' => 10000,
'task_worker_num' => swoole_cpu_num(),
'task_enable_coroutine' => true,
'enable_coroutine' => true,
'timer' => [
'enable' => true,
'tick_interval' => 1000, // 每隔1秒触发一次
],
],
],
],
];
```
2. 在需要使用Timer的地方,通过`Swoole\Timer`类的`tick`方法实现:
```php
<?php
namespace App\Controller;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\RequestMapping;
use Swoole\Timer;
/**
* @Controller
*/
class TestController
{
/**
* @RequestMapping(path="/test")
*/
public function test()
{
$id = Timer::tick(1000, function () {
echo 'tick' . PHP_EOL;
});
Timer::after(5000, function () use ($id) {
Timer::clear($id);
});
return 'OK';
}
}
```
上面的示例中,通过`Timer::tick`方法每隔1秒钟输出一次`tick`,并通过`Timer::after`方法在5秒后清除定时器。
阅读全文