tasque / event-loop
v0.1.5
2024-08-21 02:33 UTC
Requires
- php: >=8.1
- react/event-loop: ^1.5
- react/promise: ^3.2 || ^2.11
- tasque/tasque: ^0.1
Requires (Dev)
- mockery/mockery: 1.6.11
- phpstan/phpstan: ^1.10
- phpstan/phpstan-mockery: ^1.1
- phpunit/phpunit: ^10.2
README
使用 ReactPHP 事件循环 在传统 PHP 应用程序中运行,使用 Tasque。
为什么?
为了允许在传统 PHP 环境中执行周期性后台任务,例如发送保持连接或心跳消息,这种环境中通常没有事件循环。
使用方法
使用 Composer 安装此包
$ composer install tasque/event-loop
配置 Nytris 平台
nytris.config.php
<?php declare(strict_types=1); use Nytris\Boot\BootConfig; use Nytris\Boot\PlatformConfig; use Tasque\EventLoop\TasqueEventLoopPackage; use Tasque\TasquePackage; $bootConfig = new BootConfig(new PlatformConfig(__DIR__ . '/var/cache/nytris/')); $bootConfig->installPackage(new TasquePackage()); $bootConfig->installPackage(new TasqueEventLoopPackage()); return $bootConfig;
设置计时器
只需使用标准的 ReactPHP 计时器,只要在 nytris.config.php
中配置了包,如上所述。
index.php
<?php declare(strict_types=1); use React\EventLoop\Loop; require_once __DIR__ . '/vendor/autoload.php'; Loop::addPeriodicTimer(1, function () { print 'Timer elapsed' . PHP_EOL; });
等待 ReactPHP 从线程中返回的承诺
<?php declare(strict_types=1); use Tasque\EventLoop\TasqueEventLoop; /* * This will cause the current thread (which may be the main thread * as well as a background thread) to pause until the promise is resolved, * in which case the result will be returned, or rejected, in which case * the reason will be thrown. */ $result = TasqueEventLoop::await($promise);